2015-09-15 60 views
6

我们可以在特定的document.field搜寻所有的话是这样的:elasticsearch匹配从文档中的所有词语的搜索查询

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

这将搜索领域title的话BlackNikeMens这样只有返回的文档才会包含title字段中的所有这些文字。

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

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

例如,

假设有在elasticsearch数据库

现在如果我有一个query : "Nike Free Sparq 09 - Mens - White/Black/Varsity Red"进行搜索,那么它应该返回这个文件,因为在我的查询确实存在都在document.title时话时title : "Nike Free Sparq Mens White"文档

但如果我有query : "Nike Free Lebron - Mens - White/Black"进行搜索,那么它应该不会返回文档,因为我的查询有缺失

这个词Sparq是一种反向和运营商搜索的

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

+1

看看这个链接。你会在那里找到你的答案:) http:// stackoverflow。com/questions/26001002/elastic-search-difference-between-term-match-phrase-and-query-string – betto86

+0

感谢您的帮助@ betto86,它没有回答我的问题,但帮助我处理更多相关的事情。 –

+2

虽然您发布了解决方法,但我也想知道更清晰的解决方案。 – akai

回答

3

我终于得到它的工作,但没有直接的方法!

这是我做的:

  • 从源头上查询创建单词的清洁列表,通过:
    • 改变为小写
    • 与空间
    • 更换任何特殊字符和标点符号
    • 删除重复的词
  • 使用正常匹配有或经营该单词组合为一个字符串
  • 现在我们会发现结果最好的相关命中
  • 我们把这些命中一个接一个在PHP做一个单词词搜索(或任何编程语言使用)
  • 这个单词搜索将检查我们刚刚找到的匹配文档中的所有单词,并将它们与源查询中的单词匹配;这样来自命中文件的所有单词应该出现在源查询字符串中

这对我来说已经够用了!

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

相关问题