过滤值为“no”的字段

时间:2014-02-28 21:41:29

标签: elasticsearch

我无法过滤弹性搜索查询以查找值为“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。*?

中运行

1 个答案:

答案 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?