elasticsearch - Elasticsearch术语不敏感搜索

标签 elasticsearch

我有下一个查询查询

    {  
       "query":{  
          "bool":{  
             "must":[  
                {  
                   "term":{  
                      "cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
                   }
                }
             ],
             "must_not":[  

             ],
             "should":[  

             ]
          }
       },
       "from":0,
       "size":50,
       "sort":[  

       ],
       "facets":{  

       }
    }

如何按字词修改区分大小写的查询?如果需要,我可以添加更多描述。

最佳答案

默认情况下,所有字段都使用Standard Analyzer进行分析。如果在"index":"not_analyzed"中指定了mapping,则不会分析该字段
Standard Analyzer将输入字符串转换为小写并用空格和特殊字符分割。因此,在您的情况下,HERE_IS_SOME_NAME将被拆分为 token somename。但是将不会创建标记hereis,因为它们是英语副词。

当您搜索"cardrecord.fields.name.raw"字段时,也会发生同样的事情。它拆分为标记,并在特定字段中搜索所有带有该标记的文档(使用Standard Analyzer)。附言:也可以配置单独的或不同的analyzer进行搜索。

因此,匹配查询会搜索带有somename token 的所有文档。因此,您将获得其他文件。
term query专门查找确切的大小写和全字匹配。但这不会与任何文档匹配,因为 token 已经是splitlowercase
请按照您的要求执行以下步骤:

{
  "mappings": {
    "my_type": {
      "properties": {
        "cardrecord.fields.name.raw": {
          "type":  "string",
          "index": "not_analyzed" 
        }
      }
    }
  }
}

按照上面给出的代码,将此mapping更新为名为indexmy_type。但是,您需要使用新的映射创建新的索引。由于更新可能无法反射(reflect)。
然后尝试在您的问题中运行搜索查询。

添加详细的查询顺序:

映射:
  {
      "mappings": {
        "my_type": {
          "properties": {
            "cardrecord.fields.name.raw": {
              "type": "string",
              "index": "not_analyzed",
              "store": "true"
            }
          }
        }
      }
    }

索引文件:
{
  "cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}

搜索查询:
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 50,
  "sort": [],
  "facets": {}
}

关于elasticsearch - Elasticsearch术语不敏感搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34201041/

相关文章:

azure - 在 Web 应用程序中将 Nest Elasticsearch 与 Azure 结合使用

elasticsearch - 在Bosun中获取多个ElasticSearch索引

node.js - 使用 Mongoose 静态的Elastic Search Client进行条件更新

elasticsearch - 百分比中的 minimum_should_match 实际上对查询搜索有什么作用?

django - IndexMissingException - 带 Elasticsearch 的 django haystack

elasticsearch - 如何使用Elasticsearch 7+ Java API在对象内搜索数据

ubuntu - 在一个 Ubuntu 服务器上将多个 elasticsearch 节点作为服务运行

elasticsearch - 包括所有非数字网站以进行弹性查询

ruby-on-rails - 如何从Rails的elasticsearch中删除不存在的文档?

elasticsearch - 如何根据Elastic中的数据生成N个FlowFiles并设置每个FlowFile的内容?