Elasticsearch匹配多个字段

时间:2014-04-07 09:59:29

标签: python elasticsearch

我最近在网站上使用elasticsearch。场景是,我必须在field上搜索字符串。因此,如果field被命名为title,那么我的搜索查询就是,

"query" :{"match": {"title": my_query_string}}.

但现在我需要在其中添加另一个field。比方说,category。所以我需要找到我的字符串的匹配项categorysome_categorytitlemy_query_string我尝试使用multi_match。但它并没有给我我想要的结果。我现在正在调查query filter。但有没有办法在我的match查询中添加这些条件中的两个字段?

3 个答案:

答案 0 :(得分:6)

GET indice/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": "title"
          }
        },
        {
          "match": {
            "category": "category"
          }
        }
      ]
    }
  }
}

如果需要,将should替换为must

答案 1 :(得分:3)

好的,所以我认为你需要的是这样的:

"query": {
    "filtered": {
        "query": {
            "match": {
                "title": YOUR_QUERY_STRING,
            }
        },
        "filter": {
            "term": {
                "category": YOUR_CATEGORY
            }
        }
    }
}

如果您的category字段已经过分析,那么您需要在过滤器中使用match代替term

答案 2 :(得分:0)

      "query": {
            "filtered": {
                "query": {
                    "bool": {
                        "should": [
                            {"match": {"title": "bold title"},
                            {"match": {"body": "nice body"}}
                        ]
                    }
                },
                "filter": {
                    "term": {
                        "category": "xxx"
                    }
                }
            }
        }