带有大写令牌的Elasticsearch word_delimiter过滤器不匹配

时间:2019-02-10 23:37:47

标签: elasticsearch search delimiter

我使用自定义分析器构建了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

1 个答案:

答案 0 :(得分:1)

我不确定,但是可能是搜索分析器与索引分析器不同。您可以通过两件事进行检查。

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

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