繁体   English   中英

Elasticsearch-将not_analyzed字段与部分搜索词匹配

[英]Elasticsearch - match not_analyzed field with partial search term

我有一个"name" field - not_analyzed在我的"name" field - not_analyzed索引中未进行分析。

可以说"name" field值是"some name" 我的问题是,如果我想匹配搜索词- some name some_more_name someother name因为它包含some name ,那么not_analyzed允许该匹配发生,如果没有,那么我如何才能为建议的搜索找到匹配项术语?

在索引期间, name字段的文本存储在反向索引中。 如果对该字段进行了分析,则两个术语将进入倒排索引: somename 但是,由于没有对其进行分析,因此只存储了1个术语: some name在搜索过程中(使用匹配查询),默认情况下会对搜索查询进行分析和标记化。 因此,将有几个术语: somenamesome_more_namesomeother 然后,Elasticsearch将查看反向索引以查看搜索查询中是否至少有一个术语。 但是只有some name术语,因此您不会在结果集中看到此文档。
您可以使用_analyze端点与分析器一起

返回您的问题,如果您想与建议的搜索查询匹配,则必须分析您的字段。

如果您还需要保留未分析的版本,则应使用多个字段

PUT my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "name": {
          "type": "keyword",
          "fields": {
            "analyzed": { 
              "type": "text"
            }
          }
        }
      }
    }
  }
}

Taras解释清楚,我的问题可能已经解决,但是仍然无法更改索引映射,则可以使用查询(我已经在5.4 ES中进行了测试)

GET test/_search
{
  "query": {
    "query_string": {
      "default_field": "namekey",
      "query": "*some* *name*",
      "default_operator": "OR"
    }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM