如何在elasticsearch中搜索部分重音关键字?

时间:2016-09-09 18:22:39

标签: elasticsearch

我有以下弹性搜索设置:

"settings": {
     "index":{
        "analysis":{
           "analyzer":{
              "analyzer_keyword":{
                 "tokenizer":"keyword",
                 "filter":["lowercase", "asciifolding"]
              }
           }
        }
     }
}

上述内容适用于以下关键字:

  • 碧昂丝
  • CélineDion

以上数据分别以beyonceceline dion存储在elasticsearch中。

我可以在没有重音的情况下搜索CelineCeline Dion,我会得到相同的结果。但是,当我搜索Céline时,我没有得到任何结果。如何配置elasticsearch以搜索带重音的部分关键字?

查询正文如下:

{
   "track_scores": true,
   "query": {
       "bool": {
           "must": [
               {
                   "multi_match": {
                       "fields": ["name"],
                       "type": "phrase",
                       "query": "Céline"
                   }

               }

           ]
       }
   }
}

,映射是

"mappings" : {
  "artist" : {
    "properties" : {
      "name" : {
        "type" : "string",
        "fields" : {
          "orig" : {
            "type" : "string",
            "index" : "not_analyzed"
          },
          "simple" : {
            "type" : "string",
            "analyzer" : "analyzer_keyword"
          }
        },
      }

2 个答案:

答案 0 :(得分:1)

我会建议这个映射,然后从那里开始:

{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "analyzer_keyword": {
            "tokenizer": "whitespace",
            "filter": [
              "lowercase",
              "asciifolding"
            ]
          }
        }
      }
    }
  },
  "mappings": {
    "test": {
      "properties": {
        "name": {
          "type": "string", 
          "analyzer": "analyzer_keyword"
        }
      }
    }
  }
}

答案 1 :(得分:0)

确认在查询时使用了相同的分析器。以下是可能不会发生这种情况的一些可能原因:

  • 您有意在查询时指定一个单独的分析器,该分析器没有执行类似的分析
  • 您正在使用未应用分析器的termterms查询(请参阅Term Query和章节标题“为什么术语查询不符合我的文档?”)
  • 您正在使用query_string查询(例如,请参阅Simple Query String Query) - 我发现如果您使用不同的分析器指定多个字段,那么我需要将字段分成单独的查询并指定分析器参数(使用版本2.0)