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

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

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

这将在字段title搜索单词BlackNikeMens ,这样只有那些将在title字段中包含所有这些单词的文档才会被返回。

但我想要做的是有点不同。

我想查找这样的话,如果文档的title字段的所有单词都出现在我的搜索查询中,那么它将返回该文档。

例如

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

现在如果我用query : "Nike Free Sparq 09 - Mens - White/Black/Varsity Red"搜索query : "Nike Free Sparq 09 - Mens - White/Black/Varsity Red"那么它应该返回这个文件,因为document.title中的所有单词都存在于我的查询中

但如果我用query : "Nike Free Lebron - Mens - White/Black"搜索query : "Nike Free Lebron - Mens - White/Black"那么它不应该返回文档,因为我的查询中缺少Sparq这个词

这是一种反向和运算符搜索

这可能吗? 如果是,那么如何?


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

这就是我所做的:

  • 通过以下方式从源查询中创建一个干净的单词列表:
  • 改为小写
  • 用空格替换任何特殊的字符和标点符号
  • 删除重复的单词
  • 使用OR运算符的正常匹配搜索以字符串形式连接的单词
  • 现在我们将在结果中找到最好的相关命中
  • 我们逐一采取这些命中,并在php中进行单词搜索(或任何您使用的编程语言)
  • 这个单词搜索将检查我们刚发现的匹配文件中的所有单词,并将它们与源查询中的单词匹配; 这样来自命中文档的所有单词应该出现在源查询字符串中
  • 这对我来说足够好了!

    除非有人使用弹性搜索查询语言的直接方法。

    链接地址: http://www.djcxy.com/p/29061.html

    上一篇: elasticsearch match all words from document in the search query

    下一篇: Creating a algorithm for a game field