2016-09-29 112 views
0

假设在搜索词中查询“house garden garage”。索引中的文件只包含“房子,花园”,“花园,车库”和“房屋车库”,但没有文件包含所有三个单词。搜索多个单词,不匹配标记单词

当前查询是使用split_keyword分析器和运算符“AND”构建的。所以查询不会返回任何结果。

但是,如果一个搜索词被省略,则会有结果。

是否有可能只返回匹配3个术语子集的文档,并在结果中得到省略的术语?

目前我唯一看到的方法是使用“OR”作为运算符执行查询并解释启用并为每个字段的单个词提取分数并找到不匹配的词。但这似乎是非常无意的。

回答

0

我认为Named Queries会在这里很有帮助。你可以用_name PARAM写应当子句查询找出哪些字如

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "your_field": { 
       "query": "house", 
       "_name" : "house" 
      } 
      } 
     }, 
     { 
      "match": { 
      "your_field": { 
       "query": "garden", 
       "_name" : "garden" 
      } 
      } 
     }, 
     { 
      "match": { 
      "your_field": { 
       "query": "garage", 
       "_name" : "garage" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

匹配在结果检查matched_queries领域,这将告诉你它匹配哪些单词,然后你就可以找出哪些条款被省略了