【问题标题】:Elasticsearch word_delimiter filter with uppercase token dont match带有大写标记的 Elasticsearch word_delimiter 过滤器不匹配
【发布时间】:2019-07-04 10:57:58
【问题描述】:

我使用自定义分析器构建了 ElasticSearch 索引,该分析器使用 lowercase 和自定义 word_delimiter 过滤器和 keyword 标记器。

"merged_analyzer": {
   "type": "custom",
   "tokenizer": "keyword",
   "filter": [
     "lowercase",
     "asciifolding",
     "word_delim",
     "trim"
   ]
},
"merged_search_analyzer": {
    "type": "custom",
    "tokenizer": "keyword",
    "filter": [
      "lowercase",
      "asciifolding"
    ]
}

"word_delim": {
   "type": "word_delimiter",
   "catenate_words": true,
   "generate_word_parts": false,
   "generate_number_parts": false,
   "preserve_original": true
}

"properties": {
  "lastName": {
    "type": "keyword",
    "normalizer": "keyword_normalizer",
    "fields": {
      "merged": {
        "type": "text",
        "analyzer": "merged_analyzer",
        "search_analyzer": "merged_search_analyzer"
      }
    }
  }
}

然后我尝试搜索包含破折号分隔子词的文档,例如'Abc-Xyz'。使用.merged 字段。 'abc-xyz''abcxyz'(小写)都匹配,这正是我所期望的,但我希望我的分析器也匹配大写字母或空格(例如 'Abc-Xyz''abc-xyz ')。

过滤器trimlowercase 似乎对我的分析仪没有影响

知道我做错了什么吗?

我使用弹性 6.2.4

【问题讨论】:

    标签: elasticsearch search delimiter


    【解决方案1】:

    我不确定,但可能是搜索分析器与索引分析器不同。您可以做两件事来检查这一点。

    1. 配置一个 search_analyzer:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-analyzer.html,它将使用您的 merge_analyzer 进行分析。

    2. 使用分析 API:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-analyze.html 以检查您的搜索令牌是否符合预期。

    【讨论】:

    • 感谢您的帮助,我尝试了 search_analyzer : "merged_search_analyzer" 但没有效果。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多