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

如何让elasticsearch执行完全匹配查询?

穆建华
2023-03-14
问题内容

这是一个分为两个部分的问题。

我的文档如下所示:

{"url": "https://someurl.com", 
 "content": "searchable content here", 
 "hash": "c54cc9cdd4a79ca10a891b8d1b7783c295455040", 
 "headings": "more searchable content", 
 "title": "Page Title"}

我的第一个问题是如何检索“ title” 恰好是 “ No Title”的所有文档。我不希望出现标题为“此文档没有标题”的文档。

我的第二个问题是如何检索“ URL” 恰好 出现在一长串URL中的所有文档。

我正在使用pyelasticsearch,但是在curl中使用通用答案也可以。


问题答案:

如果您存储了源代码(这是默认设置),则可以使用脚本过滤器

它应该是这样的:

$ curl -XPUT localhost:9200/index/type/1 -d '{"foo": "bar"}'
$ curl -XPUT localhost:9200/index/type/2 -d '{"foo": "bar baz"}'
$ curl -XPOST localhost:9200/index/type/_search?pretty=true -d '{
"filter": {
    "script": {
        "script": "_source.foo == \"bar\""
    }
}
}'
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "index",
      "_type" : "type",
      "_id" : "1",
      "_score" : 1.0, "_source" : {"foo": "bar"}
    } ]
  }
}

编辑 :我认为值得一提的是,“
not_analyzed”映射应该是更快的方法。但是,如果您想同时对该字段进行完全匹配和部分匹配,则可以看到两个选项:使用脚本或对数据进行两次索引(一次分析,一次不分析)。



 类似资料:
  • 问题内容: 我正在使用Elasticsearch,但有一段时间魔鬼般地要进行精确匹配。我已经尝试过match,query_string等的各种组合,但是我什么也没得到,或者得到了不好的结果。查询看起来像这样: 排序结果 我当然知道“狗”,“那只狗”和“狗”的得分相同,但是我需要弄清楚如何提高得分“狗”的精确匹配度。 我也试过 但这仍然给我 问题答案: 默认情况下,使用标准分析仪分析字段。如果您想检

  • 问题内容: 我想知道如何查询字段以完全匹配字符串。 我实际上正在尝试这样查询: 会返回以开头的所有字符串。 问题答案: 我遇到了类似的问题,而ifound修复了“ .raw”-在您的示例中,请尝试

  • 我是Elasticsearch新手,对匹配查询的工作方式感到困惑。我有以下映射: 我批量导入了以下文档 我验证了所有文档都已成功加载。然后我执行匹配查询: 它只返回#1文档。我在这里感到困惑。为什么它不返回所有三个文档?我应该使用什么查询来返回这三个文档,因为它们在字段中都有“quiet”根单词? 谢谢和问候。

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

  • 问题内容: 我对使用ngram的单词有部分匹配。如何修改映射以始终偏爱精确匹配而不是ngram令牌?我不想修改查询。一个搜索框将搜索多种类型,每种类型都有各自的字段。 例如,假设我正在搜索职位,一个人的标题为“现场工程师”,另一个人的标题为“引擎技术员”。如果用户搜索“引擎”,我希望ES将后者返回为更相关。 我几乎逐字使用此映射:例外:我使用的ngram的最小值为3,最大值为11,而不是边缘ngr

  • 问题内容: 我正在尝试将字段映射为nGram和“精确”匹配,并使精确匹配首先出现在搜索结果中。这是对类似问题的解答,但我正努力使其工作。 无论我为“精确”字段指定什么提升值,每次都会得到相同的结果顺序。这是我的字段映射的外观: 这就是查询的样子: 问题答案: multi_field映射是正确的,但是搜索查询需要像这样更改: 现在,结果将“精确”匹配考虑在内,并加总得分。