如何在ElasticSearch上的字段内搜索“OR”字?

时间:2013-06-17 18:26:21

标签: elasticsearch

当我尝试搜索存储状态缩略词的字段时,我遇到了问题。

我有下一个查询:

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

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

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

1 个答案:

答案 0 :(得分:0)

听起来你想要改变默认分析器远离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"
      }
    }
  }
}'

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

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