【问题标题】:Elastic search multiple analyzers on index弹性搜索索引上的多个分析器
【发布时间】:2021-02-03 12:59:49
【问题描述】:

我有一个带有名称字段的索引。 我想在该字段上使用 soundex 分析器和同义词分析器。

我想在一个索引中实现两者。这甚至可能吗? 请高手帮帮我

索引 1

{
"settings": {
"index": {
"number_of_shards": "1",
"provided_name": "phonetic_sample",
"creation_date": "1603097131476",
"analysis": {
"filter": {
"my_soundex": {
"replace": "false",
"type": "phonetic",
"encoder": "soundex"
}
},
"analyzer": {
"my_analyzer": {
"filter": [
"lowercase",
"my_soundex"
],
"tokenizer": "standard"
}
}
}

我查询凯瑟琳并匹配凯瑟琳、凯瑟琳和凯瑟琳

索引 2

{
"settings": {
"index": {
"number_of_shards": "1",
"provided_name": "phonetic_synonym",
"creation_date": "1603121439096",
"analysis": {
"filter": {
"synonym": {
"format": "wordnet",
"type": "synonym",
"synonyms": [
"s(100000001,1,'Bill',v,1,0).",
"s(100000001,2,'William',v,1,0).",
"s(100000001,3,'Wilhelm',v,1,0)."
]
}
},
"analyzer": {
"synonym": {
"filter": [
"synonym"
],
"tokenizer": "whitespace"
}
}
}

我查询 Bill 并匹配 Bill、William 和 Wilhelm

【问题讨论】:

  • 能否分享您的示例索引映射、数据和预期的搜索结果?
  • @Bhavya,我已经更新了帖子。提前感谢您的帮助

标签: elasticsearch elasticsearch-analyzers elasticsearch-indices


【解决方案1】:

您可以使用multi-field with multiple analyzers。你可以声明 name 字段的子字段,每个子字段都有不同的分析器。

下面是修改后的索引映射。

索引映射:

{
  "settings": {
    "index": {
      "analysis": {
        "filter": {
          "my_soundex": {
            "type": "phonetic",
            "encoder": "metaphone",
            "replace": false
          },
          "synonym": {
            "format": "wordnet",
            "type": "synonym",
            "synonyms": [
              "s(100000001,1,'Bill',v,1,0).",
              "s(100000001,2,'William',v,1,0).",
              "s(100000001,3,'Wilhelm',v,1,0)."
            ]
          }
        },
        "analyzer": {
          "synonym": {
            "filter": [
              "synonym"
            ],
            "tokenizer": "whitespace"
          },
          "my_analyzer": {
            "filter": [
              "lowercase",
              "my_soundex"
            ],
            "tokenizer": "standard"
          }
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "analzyer": "synonym",
        "search_analyzer": "synonym",
        "fields": {
          "content": {
            "type": "text",
            "analyzer": "my_analyzer",
            "search_analyzer": "my_analyzer"
          }
        }
      }
    }
  }
}

然后您可以在查询中参考namename.content。您的搜索查询将如下所示:

{
  "query": {
    "multi_match": {
      "query": "Bill",
      "fields": [ 
        "name",
        "name.content"
      ],
      "type": "most_fields" 
    }
  }
}

【讨论】:

  • "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "standard", "filter": [ "lowercase", "my_soundex" ] }, "synonym": { "tokenizer": "whitespace", "filter": [ "synonym" ] } }, "filter": { "my_soundex": { "type": "phonetic", "encoder": "soundex", "replace": false }, "synonym": { "type": "synonym", "format": "wordnet", "synonyms": [ "s(100000001,1,'Bill',v,1,0).", "s(100000001,2,'William',v,1,0).", "s(100000001,3,'Wilhelm',v,1,0)." ] } } } },
  • "mappings": { "properties": { "FNAME": { "type": "text", "analyzer":"my_analyzer", "search_analyzer":"my_analyzer" }, "LNAME": { "type": "text" , "analyzer":"synonym", "search_analyzer":"synonym" }, } } } } } }
猜你喜欢
  • 2014-09-02
  • 1970-01-01
  • 2016-05-20
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多