在Elasticsearch中的数组中进行精确的字符串搜索

时间:2017-03-24 12:35:06

标签: arrays string elasticsearch

我想在数组中搜索确切的字符串。 我在ES中的数据如下:

         { category": [
              "abc test"
           ],
           "es_flag": false,
           "bullet_points": [],
           "content": "",
           "description": false }

我有多个类别,如“abc test”,“new abc test”等...

我正在尝试下面的查询但是我得到了多个类别的结果,我正在搜索“abc test”但是“new abc test”类别也会出现在结果中。

    {
    "from": 0,
    "size": 30,
    "query": {
        "bool" : {
            "must": [
                { "match_phrase": { "category": "abc test" } }
            ]
        }
    },
    "sort": [ { "createdAt": { "order": "desc" } } ]
}

帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我假设您正在使用默认分析器。在这种情况下,针对match_phrase的{​​{1}}将匹配所有具有相邻令牌"field": "abc test"的字段的文档,包括:

  • abc test
  • new abc test
  • abc test new

它不匹配:

  • foo abc test bar - 查询令牌不相邻
  • abc new test - 查询令牌相邻,但顺序错误

对您的字段使用test abc分析器实际上有什么帮助(您需要从头开始构建新索引或更新映射)。如果你是用scrach构建的:

keyword

然后你需要使用简单的查询,例如像这样(curl -XPUT http://localhost:9200/my_index -d ' { "mappings": { "categories": { "properties": { "category": { "type": "text", "analyzer": "keyword" } } } } }' match会这样做):

term

答案 1 :(得分:0)

我的elasticsearch版本是6.0.1。我正在使用这种方法:

GET <your index>/_search
{
  "query": {
    "bool": {
      "must": [{
        "query_string": {
          "query": "category:abc OR category:test"
        }
      }]
    }    
  },
  "sort":[{"createdAt": {
    "order": "desc"
  }}]
}