【问题标题】:How to search for "OR" word inside a Field on ElasticSearch?如何在 ElasticSearch 的字段中搜索“或”字?
【发布时间】:2013-08-15 10:17:27
【问题描述】:

当我尝试搜索存储状态首字母缩写词的字段时遇到问题。

我有下一个问题:

{
    "query": {
         "query_string": {
               "query": "field_state:'OR' AND type:incentive"
                 }
              }
} 

当我尝试获取俄勒冈州 (OR) 的结果时,问题就来了。对于所有其他状态都有效,但对于这个特定的状态,就像 Elasticsearch 将“OR”作为检索所有状态的条件。

有没有办法让这个工作????,我已经用术语、前缀过滤器和所有的结果都试过了。

【问题讨论】:

  • 尝试只使用带有 2 个条件的 AND 查询而不是 query_string 查询。
  • 你在这个领域使用什么分析器?您确定该值没有被视为停用词吗?
  • 我没有使用任何分析器,也没有定义任何停用词。有没有办法知道这是否是默认停用词的一部分??
  • @poncho1984 - "or" 是 StandardAnalyzer 的默认停用词集中的停用词(可能需要查看 lucene 源代码才能看到 StopAnalyzer.ENGLISH_STOP_WORDS_SET 的内容)。
  • 是否可以仅通过设置分析器来覆盖默认值?或者这将是如何解决这个问题的最佳方法????

标签: elasticsearch


【解决方案1】:

听起来您想将默认分析器从Standard Analyzer 中更改出来(它会做很多事情,包括过滤掉像“或”这样的英语停用词)。下面是一个使用Simple Analyzer(仅小写)的示例:

curl -XPOST "http://MYHOST/MYINDEX/_close"
curl -XPUT "http://MYHOST/MYINDEX/_settings" -d '{
  "analysis": {
    "analyzer": {
      "default": {
        "type": "simple"
      }
    }
  }
}'
curl -XPOST "http://MYHOST/MYINDEX/_open"

但是,如果您想要更改 field_state 的分析器,您可以直接更新该字段的映射:

curl -XPUT "http://MYHOST/MYINDEX/MYTYPE/_mapping" -d '{
  "MYTYPE": {
    "properties": {
      "field_state": {
        "analyzer": "simple",
        "type": "string"
      }
    }
  }
}'

请注意,如果您使用的是简单分析器,您可能需要搜索“或”而不是“或”:

curl -XPOST "http://MYHOST/MYINDEX/MYTYPE/_search" -d '{
  "query": {
    "query_string": {
      "query": "field_state:'or' AND type:incentive"
    }
  }
}'

【讨论】:

  • 默认情况下Stop Token Filter(由标准分析器使用)使用硬编码的停用词列表,其中包括:“a”、“an”、“and”、“are” , “as”, “at”, “be”, “but”, “by”, “for”, “if”, “in”, “into”, “is”, “it”, “no”, “不”、“的”、“在”、“或”、“这样”、“那个”、“该”、“他们的”、“那么”、“那里”、“这些”、“他们”、“这个” , "to", "was", "will", "with"
猜你喜欢
  • 2017-12-17
  • 2020-09-12
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 2018-10-12
  • 2018-12-22
  • 1970-01-01
相关资源
最近更新 更多