ElasticSearch:Query_String但必须匹配特定字段中的1个术语?

时间:2013-11-30 01:10:24

标签: lucene elasticsearch

我想构建一个ElasticSearch查询,我查询多个字段,但查询中的一个字必须匹配其中一个字段。

例如,假设我查询“假日派对食物”,我希望它返回标题中至少有一个术语的所有文档,其余文件在html_source中。

如果文件有:

title: Holiday, html_source: party food => MATCH
title: Party, html_source: food holiday => MATCH
title: Food, html_source: holiday party => MATCH
title: RANDOM TITLE, html_source: holiday party food => NO MATCH.

这是我到目前为止构建的内容,它匹配包含html_source中所有术语的文档,但不在标题中,这不是我想要的。

{
   "query":{
      "query_string":{
         "query":"holiday party food",
         "default_operator":"AND",
         "fields":[
            "title","html_source"
         ]
      }
   },
   "sort":[
      {
         "total_shares":"desc"
      }
   ]
}

1 个答案:

答案 0 :(得分:0)

这是一个我认为你想要的查询语法版本:

+(
  (+title:holiday +(body:party   body:food  -body:holiday))
  (+title:party   +(body:holiday body:food  -body:party)
  (+title:food    +(body:holiday body:party -body:food))
)

如果这不起作用,我认为它指出了正确的方向。这种查询的技巧是明确枚举所有选择。