elasticsearch:组合文本匹配和数组包含

时间:2017-01-16 14:08:14

标签: elasticsearch

我们在elastic中保存了以下结构中的文档:

{
    ...
    name: "name",
    ancestors: ["id1", "id2", "id3"],
    ...
}

我想创建一个搜索name: "some name" AND ancestors contains "id1"的搜索查询。

我尝试了很多查询但似乎没有查询,或者返回了所需的结果。如果有任何帮助,这个组合查询应该每次只返回一个条目。

我尝试过的一些问题如下:

filtered: {
    query: {
        query_string: {
            query: "name:name"
        },
        term: {
            ancestors: "id1"
        }
    }
}

__

match: {
    name: "name",
    ancestors: "id1"
},
defaultOperator: 'AND'

__

bool: {
   must: { term: { name: "name" }},
   filter: {
       term: { ancestors: "id1" }
   }
}

映射如下:

{
  "data": {
    "mappings": {
      "entry": {
        "properties": {
          "ancestors": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      }
    }
  }
}

我们尚未更改默认映射,这就是ancestors类型为string的原因,但我认为这没有任何区别

1 个答案:

答案 0 :(得分:1)

尝试此查询:

{
"query": {
  "bool": {
     "must": [
        { 
         "query_string": { 
            "default_field": "name", 
           "query": "stripe AND 1" 
         } 
      },
        {
           "match": {
              "ancestors": "id1"
             }
          }
        ]
     }
   }
 }