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

Imr*_*med 12 elasticsearch

我们可以在特定的document.field中搜索所有单词,如下所示:

{ "query" : { "match" : { "title": { "query" : "Black Nike Mens", "operator" : "and" } } } }
Run Code Online (Sandbox Code Playgroud)

这将搜索单词Black,NikeMens在字段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缺少单词

这是一种反向和操作员搜索

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

Imr*_*med 4

我终于让它工作了,但不是用直接方法!

这就是我所做的:

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

这对我来说已经足够好了!

除非有人有来自elasticsearch查询语言的直接方法。