ElasticSearch查询因状态代码而失败"在"和"或"保留字

时间:2013-10-24 16:45:04

标签: elasticsearch

我正在查询状态代码作为查询字符串的状态,“in”和“or”(印第安纳州和俄勒冈州)失败,大概是因为它们是保留字。

我可以确认数据是否正确存在于索引中,因为当我运行时:

curl -XGET 'localhost:9200/state/_search?size=200&pretty=true' -d '{"query" : {"match_all" : {}}}' > out.txt

我可以看到工作状态和非工作状态的数据。另外,如果我将CouchDB中非工作状态的状态代码更改为XYZ,我可以通过运行上述命令并搜索XYZ来验证更改是否通过ES。所以我知道我正在查看正确的数据并且索引正常。

问题是查询。现在,这是我的整个查询对象的样子:

var q = {
     size: 0,
     query: {
         filtered: {
             query: { term: { postcode: 'tn' } },
             filter: { term: { version: 2 } }
         }
     },
     facets: {
         version: {  terms: { field: "version" }  },
         count : { statistical : { field : "latestValues.enroll"  } }
     }
};

如果我运行该查询,则无法获得任何结果。如果我用“tn”或“tx”或“sc”等改变“或”,那么它可以正常工作。

我找了一种逃避保留字的方法并找到了this link但是在运行以下查询时它似乎对我不起作用:

var q = {
    size: 0,
    query: {
        filtered: {
            query: { match_all: { } },
            filter: { term: { version: 2, postcode: 'or' } }
        }
    },
    facets: {
        version: {  terms: { field: "version" }  },
        count : { statistical : { field : "latestValues.enroll"  } }
    }
};

(请注意,当使用非保留字状态更改“或”时,该查询也有效,因此我知道查询本身不存在问题。)

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这不是关于"保留"言语,它关于停止的话。您正在使用一个删除停用词的分析器(默认分析器直到更新版本的Elasticsearch)。

您需要更改该字段的分析器,请参阅此处:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html

这将改变需要重建索引,但