如何在elasticsearch中使用通配符以多种方式索引同一字段

ee7vknir  于 2021-07-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(327)

我有以下字段(“名称”)的Map:

"name": {
                "analyzer": "ngram_analyzer",
                "search_analyzer": "keyword_analyzer",
                "type": "text",
                "fields": {
                    "raw": {
                        "type": "keyword"
                    }
                }
            }

它可以很好地工作,并允许作为文本和关键字进行搜索。根据es文件:
https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html 字符串字段可以Map为全文搜索的文本字段,也可以Map为排序或聚合的关键字字段。
但我正在尝试扩展这个Map以支持通配符搜索。
我试图修改Map(例如下面这样),但无法使其工作。

"name": {
                "analyzer": "ngram_analyzer",
                "search_analyzer": "keyword_analyzer",
                "type": "text",
                "fields": [{
                    "raw": {
                        "type": "wildcard"
                    }
                }, {
                    "type": "keyword"
                }]
            }

也试过了,

"name": {
                "analyzer": "ngram_analyzer",
                "search_analyzer": "keyword_analyzer",
                "type": "text",
                "fields": [{
                    "raw": {
                        "type": "wildcard"
                    }
                }, {"raw": {
                    "type": "keyword"
                }}]
            }

Map应该是什么样的,以允许将名称作为文本、关键字和通配符进行搜索。

wgmfuz8q

wgmfuz8q1#

可以使用多个字段来索引 name 以多种方式输入字段。修改后的索引Map将

{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "ngram_analyzer",
        "search_analyzer": "keyword_analyzer",
        "fields": {
          "raw": {
            "type": "wildcard"
          },
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

现在你可以用 name 对于基于文本的搜索, name.raw 对于通配符搜索, name.keyword 用于关键字搜索

相关问题