elasticsearch - 字词查询未返回字符串列表的结果

标签 elasticsearch

我有这个 flex 查询,它无法返回terms.letter_score的期望结果。我确定索引中有可用的匹配项。此查询(不包括letter_score)返回预期的过滤结果,但letter_score不返回任何结果。 (据我所知)唯一的区别是cat_id值是整数与字符串的列表。有什么想法可能是这里的问题吗?我基本上是想让它匹配letter_score列表中的任何值。

谢谢

{
   "size": 10,
   "query": {
      "bool": {
         "filter": [
            {
               "terms": {
                  "cat_id": [
                     1, 
                     2,
                     4
                  ]
               }
            },
            {
               "terms": {
                  "letter_score": [
                     "A",
                     "B",
                     "E"
                  ]
               }
            }
         ]
      }
   }
}

最佳答案

听起来您的letter_score字段是text类型,因此已经过分析,因此 token ABE已存储为abe,因此terms查询与它们不匹配。

同样,在这种情况下,很有可能在索引编制时忽略 token a,因为它是一个停用词,并且standard分析器(默认)会忽略它们(如果您使用的是ES 5+)。

第一种方法是使用match查询代替terms,如下所示:

{
   "match": {
      "letter_score": "A B E"
   }
}

如果仍然无法解决问题,建议您将letter_score字段的映射更改为keyword(需要重新索引数据),然后您的查询将像现在一样工作

关于elasticsearch - 字词查询未返回字符串列表的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313908/

相关文章:

elasticsearch - 有人对Elastic-search和GraphQL比较进行过研究吗?

elasticsearch - 有没有一种方法可以在汇总后拉回字段名称?

elasticsearch - logstash文本文件输出配置

elasticsearch - 嵌套过滤器在Elasticsearch 1.7中无法正常工作

php - 使用ElasticSearch进行高级搜索

elasticsearch - 在Elasticsearch中创建数字字段的倒排索引

rest - 获取Kibana 5.6搜索结果的REST/cURL表示形式

elasticsearch - 用于Elasticsearch的Elastic-Builder npm的functionScoreQuery的查询

Javascript - 检查文本/模板脚本中是否存在字段

elasticsearch - Elasticsearch将日期与斜杠字符匹配