elasticsearch 如何在嵌套的文本数组上进行部分文本(query_string)匹配?

yrdbyhpb  于 2023-05-22  发布在  ElasticSearch
关注(0)|答案(1)|浏览(112)

有没有一种方法可以对字符串数组的嵌套字段进行部分或子字匹配?
我有一个包含文本数组的嵌套字段的索引文档,例如:

"entities":[
   "0":{
      "id":13,
      "tags":[
         "0":"some other class of tag may be present"
      ]
   }
]

实体字段被索引为具有“标签”属性的“嵌套”类型。“tags”是“keyword”类型,具有文本类型的字段“lower_case”和不区分大小写的分析器。
使用包含完整值文本的嵌套query_string,我可以获得匹配:

{
   "query":{
      "nested":{
         "query":{
            "bool":{
               "must":[
                  {
                     "query_string":{
                        "query":"some other class of tag may be present",
                        "fields":[
                           "entities.tags.lower_case"
                        ]
                     }
                  }
               ]
            }
         },
         "path":"entities"
      }
   }
}

但是当我尝试使用部分匹配(例如。“其他”或“类”)我没有得到匹配。在elasticsearch中,有没有一种方法可以对嵌套数组进行部分匹配?
编辑:在java中完成的Map:

XContentBuilder docProperties = XContentFactory.jsonBuilder();
docProperties
.startObject( "entities" )
   .field("type", "nested")
   .startObject("properties")
        .startObject( "tags" )
           .field("type", "keyword")
           .startObject("fields")
                  .startObject( "lower_case" )
                      .field("type", "text")
                      .field("analyzer", "case_insensitive")
                  .endObject()
              .endObject()
          .endObject()
      .endObject()
.endObject();
hfwmuf9z

hfwmuf9z1#

试试这个:

"settings": {
        "analysis": {
            "analyzer": {
                "case_insensitive": {
                    "type": "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase"
                    ]
                }
            }
        }
    }

你不应该使用关键字tokenizer。

The keyword tokenizer is a “noop” tokenizer that accepts whatever text it is given and outputs the exact same text as a single term

相关问题