当前位置: 首页 > 面试题库 >

Elasticsearch与字段的匹配列表

刘弘新
2023-03-14
问题内容

我有一个列表,数组或您熟悉的任何一种语言。例如,names:如果与这些名称之一匹配["John","Bas","Peter"],我想查询该name字段。

一种方法是使用OR过滤器。例如

{
    "filtered" : {
        "query" : {
            "match_all": {}
        },
        "filter" : {
            "or" : [
                {
                    "term" : { "name" : "John" }
                },
                {
                    "term" : { "name" : "Bas" }
                },
                {
                    "term" : { "name" : "Peter" }
                }
            ]
        }
    }
}

有什么更好的办法吗?如果它是查询,则比过滤器更好。


问题答案:
{
  "query": {
    "filtered" : {
      "filter" : {
        "terms": {
          "name": ["John","Bas","Peter"]
        }
      }
    }
  }
}

哪一个Elasticsearch会像您曾经使用过的那样重写

{
  "query": {
    "filtered" : {
      "filter" : {
        "bool": {
          "should": [
            {
              "term": {
                "name": "John"
              }
            },
            {
              "term": {
                "name": "Bas"
              }
            },
            {
              "term": {
                "name": "Peter"
              }
            }
          ]
        }
      }
    }
  }
}

在大多数情况下,使用布尔型过滤器时,使用bool过滤器比and或更好or。原因在Elasticsearch博客中进行了解释:http://www.elasticsearch.org/blog/all-about-
elasticsearch-filter-bitsets/



 类似资料:
  • 问题内容: 我想获取与“ statusCode”不匹配的结果:200 为了匹配字段中的文本,您可以使用 我尝试过这样的事情: 根据:https : //www.elastic.co/guide/zh- CN/elasticsearch/reference/current/query-dsl-bool- query.html 问题答案: 试试这个

  • 我希望得到与“StatusCode”不匹配的结果:200 为了匹配您使用的字段中的文本 我试过这样的方法: 根据:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

  • 我和ElasticSearch一起工作。当我执行此查询时: 我得到了我想要的(所有的结果,其中有参考黑莓,但不是Q10)。 但是,我想限制搜索的字段只限于“title”字段。例如,_source文档有标题、正文、标签等,我只想搜索标题。ElasticSearch“匹配”似乎很适合我... 虽然这只成功地搜索了标题,但它仍然返回标题中带有Q10的结果,这与上面的搜索不同。 我正在看比赛文档,但似乎不

  • 我有一个带有标准分析器的弹性搜索集群。我知道使用这个分析仪,术语“300”被分析为一种类型。 假设我正在搜索一个具有字段“name”的文档,该字段的值为“纸巾300 CT”,分析为[“Paper”(ALPHANUM)、“tower”(ALPHANUM)、“300”(NUM)、“CT”(ALPHANUM)] 目前,当我使用模糊/通配符查询时,如下所示: 无论模糊性如何调整,模糊查询都不匹配。我希望术

  • 当我通过一个特定方面进行过滤时,该特定字段的方面在结果中被正确过滤,但其他方面的字段保持不变。解释这一点的最佳方法是使用查询和响应。 因此,如您所见,它返回所有方面,即使唯一的结果位于Eugene。它还返回的计数7。为什么它会返回所有这些额外的方面和错误的计数?下面是我的ruby映射。

  • 问题内容: 有没有办法让ElasticSearch在分析的字段上识别完全匹配?理想情况下,我想小写,标记化,词干化,甚至对我的文档进行语音化,然后让查询提取“精确”匹配项。 我的意思是,如果我索引“汉堡包”和“汉堡包”,它们将被分析为[“汉堡包”,“小圆面包”]和[“汉堡包”]。如果我搜索“汉堡”,它将仅返回“汉堡”文档,因为这是“完全匹配”。 我尝试使用关键字标记器,但不会阻止各个标记。我是否需