我正在查询状态代码作为查询字符串的状态,“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" } }
}
};
(请注意,当使用非保留字状态更改“或”时,该查询也有效,因此我知道查询本身不存在问题。)
有什么想法吗?
答案 0 :(得分:4)
这不是关于"保留"言语,它关于停止的话。您正在使用一个删除停用词的分析器(默认分析器直到更新版本的Elasticsearch)。
您需要更改该字段的分析器,请参阅此处:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html
这将改变需要重建索引,但