Elasticsearch -将不区分大小写的完全匹配搜索添加到自定义分析器

eiee3dmh  于 2022-12-11  发布在  ElasticSearch
关注(0)|答案(1)|浏览(121)

我有一个索引如下:

{
  "entities": {
    "mappings": {
      "properties": {
        "content": {
          "type": "text",
          "analyzer": "stop_delimiter_stemmer_analyzer"
        }
      }
    }
  }
}

下面是stop_delimiter_stemmer_analyzer(我的自定义分析器):

"analysis": {
  "analyzer": {
    "stop_delimiter_stemmer_analyzer": {
      "tokenizer": "whitespace",
      "filter": [
        "word_delimiter_graph",
        "german_stemmer",
        "english_stemmer",
        "french_stemmer",
        "italian_stemmer",
        "multi_language_stopwords"
      ],
    }
  },
  "filter": {
    "german_stemmer": {
      "type": "stemmer",
      "name": "light_german"
    },
    "english_stemmer": {
      "type": "stemmer",
      "name": "english"
    },
    "french_stemmer": {
      "type": "stemmer",
      "name": "light_french"
    },
    "italian_stemmer": {
      "type": "stemmer",
      "name": "light_italian"
    },
    "multi_language_stopwords": {
      "type": "stop",
      "stopwords": [
        "_english_",
        "_french_",
        "_italian_",
        "_dutch_"
      ]
    }
  }
}

如果我使用match查询来搜索Preuve à futur,Elasticsearch会将其作为第一个结果找到。
但如果我搜索它作为preuve à futur,它发现它在这么多的排名较低.
我需要将不区分大小写的完全匹配添加到搜索中,以便在第一个结果中查找完全匹配(不区分大小写或区分大小写)。
我怎么能那样做呢?
谢谢你的好意。

注意:我使用ElasticSearch7.16

balp4ylt

balp4ylt1#

只需使用lowercase标记过滤器作为分析器定义的filter列表中的第一项,这样所有标记都将以小写形式编制索引,搜索时间也与match查询使用相同的分析器一样,搜索字符串也将以小写形式标记化,您将能够以不区分大小写的方式获得结果。

"filter": [
  "lowercase",
  "word_delimiter_graph",
  "german_stemmer",
  "english_stemmer",
  "french_stemmer",
  ...
]

相关问题