我无法过滤弹性搜索查询以查找值为“no”的项目。我使用的是版本0.90。
使用以下项目创建索引:
{ "foo": "abc", "bar": "yes" }
{ "foo": "def", "bar": "no" }
{ "foo": "ghi", "bar": "maybe" }
现在,在bar
上尝试一些术语查询:
{ "query": { "term": { "bar": "yes" } } }
// Hits: 1
{ "query": { "term": { "bar": "maybe" } } }
// Hits: 1
{ "query": { "term": { "bar": "no" } } }
// Hits: 0 <-- What??
当我使用值“no”查询时没有命中。
看一下方面:
{ "facets": { "bar": { "terms": { "field": "bar" } } } }
结果:
{
...
"facets": {
"bar": {
"_type": "terms",
"missing": 1,
"total": 2,
"other": 0,
"terms": [
{ "term": "yes", "count": 1 },
{ "term": "maybe", "count": 1 }
]
}
}
}
“no”值甚至没有返回一个方面。到底是怎么回事?如何在索引中找到值为“no”的项目?
我刚下载了最新版本(1.0.1),我可以看到这是修复的。但是,我在0.90.3并且行为在0.90.12中是相同的。有没有办法让它在0.90。*?
中运行答案 0 :(得分:1)
这是在0.90中使用标准分析仪的预期行为。索引字符串时默认使用的标准分析器应用stop word token filter。 &#34;否&#34;出现在停用词列表中,因此从被索引的术语列表中删除。这就是搜索&#34; no&#34;没有任何回报。
这种行为在1.0中的不同之处在于,停用词的好处受到质疑并从默认行为中删除。 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_stopwords.html
如果您想看到相同的行为,您可以创建自己的分析器,或者只使用关键字分析器。这只会将字符串转换为小写,而不是将其拆分,也不会将停用词过滤器应用于术语。
这里有关于这个主题的好文章:http://www.elasticsearch.org/blog/stop-stopping-stop-words-a-look-at-common-terms-query/ 和另一个Stackoverflow问题:elasticsearch: how to index terms which are stopwords only?