带有过滤器的elasticsearch中的多字查询

时间:2017-03-16 12:57:14

标签: search elasticsearch filter

我将数据集放入ES,其中包含以下字段:

Category,Question,Answer

尝试查询我的弹性搜索索引中的短语" world series"在问题字段或答案字段中,但它也必须仅将其结果/搜索限制为我指定的类别

{
   "query" : {
      "constant_score" : { 
         "filter" : {
            "bool" : {
              "should" : [
                 { "term" : {"Question" : "world series"}},
                 { "term" : {"Answer" : "world series"}} 
              ],
              "must" : {
                 "term" : {"Category" : "Sport"} 
              }
           }
         }
      }
   }
}'

但是,当我这样做时,它不会让我使用多个单词(即'世界系列')。

我如何搜索短语/词语,但只搜索我想要的类别(即体育)?

2 个答案:

答案 0 :(得分:1)

试试这个

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "Category": "Sport"
          }
        },
        {
          "multi_match": {
            "query": "world series",
            "type": "cross_fields",
            "operator": "and",
            "fields": [
              "Question",
              "Answer"
            ]
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 10,
  "sort": [],
  "aggs": {}
}

答案 1 :(得分:0)

您可以添加一个名为Searchtext的额外字段,该字段经过分析,Searchtext可能包含类别,问题,答案

然后;

{
"query": {
    "constant_score": {
        "filter": {
            "bool": {
                "must": {
                    "term": {
                        "Category": "Sport"
                    },
                    "match": {
                        "SearchText": {
                            "query": "world series",
                            "operator": "and"
                        }
                    }
                }
            }
        }
    }
}