ElasticSearch 使用模式分析器搜索特殊字符

标签 elasticsearch tokenize query-analyzer

我目前正在使用自定义分析器,其标记器设置为模式 (\W|_)+因此,每个术语都只是字母,并拆分为任何非字母。例如,我有一个内容为 [dbo].[Material_Get] 的文档。另一个是 dbo.Another_Material_Get .我希望能够搜索“Material_Get”并点击这两个文档,但如果我搜索“[Material_Get]”,它仍然会点击 dbo.Another_Material_Get即使它没有括号。此外,如果我搜索“Material Get”(在引用的搜索中),我不应该得到任何点击,因为它们都没有那个短语。

我可以选择一个分析器/标记器,只要文件中的任何地方有输入字符串,即使它旁边还有其他东西,它也会找到。例如,搜索“aterial_get”将在两者中匹配。有可能做我的任何一个案例吗?

最佳答案

从你所解释的我得到的是你想要做部分匹配也像搜索“aterial_get”。

为了满足您的所有要求,您需要将字段的映射更改为 ngram token filter在分析器中并且不删除特殊字符。 sample 分析仪看起来像

{
  "settings":{
    "analysis":{
      "analyzer":{
        "partialmatch":{
          "type":"custom",
          "tokenizer":"keyword",
          "filter":[ "lowercase", "ngram" ] 
        }
      },
      "filter":{
        "ngram":{
          "type":"ngram",
          "min_gram":2,
          "max_gram":15
        }
      }
    }
  }
}

并在您的映射中定义 your_field上面定义的分析器“部分匹配”。您可以更改 min_gram 的值和 max_gram根据您的需要。

使用此映射,您可以进行正常的术语搜索,如下所示
{
    "term": {
        "your_field": "aterial_get"
    }
}

关于ElasticSearch 使用模式分析器搜索特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30214116/

相关文章:

elasticsearch - 弹性:用不必要的词搜索

在 Elasticsearch 中搜索带空格的名称(文本)

sql-server - 在 SQL Server(查询分析器)中识别查询结果中隐藏字符的最佳方法是什么?

ruby-on-rails - 使用 Elasticsearch/Tire 展平多态 AR 关系

java - 使用java api客户端进行elasticsearch身份验证

nlp - Wordpiece 标记化与传统词形还原?

solr - 如何使用 NGramTokenizerFactory 或 NGramFilterFactory?

python - search() 中的 Elasticsearch-py 无法识别 'analyzer' 参数

java - [警告][插件]插件 jdbc- River,无法调用自定义 onModule 方法

php - elasticsearch php多个名称