一尘不染

elasticsearch匹配搜索查询中来自文档的所有单词

elasticsearch

我们可以像这样在特定document.field中搜索所有单词:

{ "query" : { "match" : { "title": { "query" : "Black Nike Mens", "operator" : "and" } } } }

这将搜索词BlackNikeMens在该领域title,从而只返回这些文档将在所有这些词title场。

但是我想做的却有些不同。

我想进行查找,以便如果title该文档字段的所有单词都出现在我的搜索查询中,则它将返回该文档。

例如

假设title : "Nike Free Sparq Mens White"Elasticsearch数据库中有一个文档

现在,如果我搜索“ a”,query : "Nike Free Sparq 09 - Mens - White/Black/Varsity Red"它将返回该文档,因为document.title中的所有单词确实存在于我的查询中

但是,如果我搜索“ a”,query : "Nike Free Lebron - Mens - White/Black"则它不应返回文档,因为我的查询中Sparq缺少“ word”一词

这是一种反向运算符搜索

这可能吗?如果是,那怎么办?


阅读 283

收藏
2020-06-22

共1个答案

一尘不染

我终于让它工作了,但没有直接方法!

这是我的工作:

  • 通过以下方式从源查询中创建单词的干净列表:
    • 更改为小写
    • 用空格替换任何特殊字符和标点符号
    • 删除重复的单词
  • 使用带有OR运算符的普通匹配搜索以字符串形式连接的单词
  • 现在,我们将找到结果中最相关的匹配
  • 我们一个接一个地点击,并在php(或您使用的任何编程语言)中进行逐词搜索
  • 此词搜索将根据我们刚刚找到的匹配项检查文档中的所有词,并将其与源查询中的词匹配;这样,命中文档中的所有单词都应出现在源查询字符串中

这对我来说足够好了!

除非有人从Elasticsearch查询语言获得直接方法。

2020-06-22