elasticsearch Elasticsearch:edgeNGram令牌过滤器对非英语令牌有效吗?
我正在尝试为索引设置新映射。它将支持部分关键字搜索和由ES支持的自动完成请求 带空格标记器的edgeNGram标记过滤器似乎是一个不错的选择。到目前为止,我的设置如下所示:
elasticsearch Elasticsearch:edgeNGram令牌过滤器对非英语令牌有效吗?,
elasticsearch,lucene,cjk,
elasticsearch,Lucene,Cjk,我正在尝试为索引设置新映射。它将支持部分关键字搜索和由ES支持的自动完成请求 带空格标记器的edgeNGram标记过滤器似乎是一个不错的选择。到目前为止,我的设置如下所示: curl -XPUT 'localhost:9200/test_ngram_2?pretty' -H 'Content-Type: application/json' -d'{ "settings": { "index": { "analysis": { "analyzer":
curl -XPUT 'localhost:9200/test_ngram_2?pretty' -H 'Content-Type: application/json' -d'{
"settings": {
"index": {
"analysis": {
"analyzer": {
"customNgram": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["lowercase", "customNgram"]
}
},
"filter": {
"customNgram": {
"type": "edgeNGram",
"min_gram": "3",
"max_gram": "18",
"side": "front"
}
}
}
}
}
}'
问题是日语单词!NGrams对日语字母有效吗?
例如:
【11月13日13時まで、フォロー&RTで応募!】
此文档中没有空格-无法使用部分关键字搜索文档,这是预期的吗?您可能需要查看icu\u标记器,它增加了对外语的支持 根据UAX#29中的定义,将文本标记为单词边界上的单词: Unicode文本分割。它的行为非常类似于标准 标记器,但通过使用 基于词典的泰语、老挝语、汉语单词识别方法, 日文、韩文和使用自定义规则破坏缅甸和 高棉语文本转换成音节 把你的样品放进去
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"my_icu_analyzer": {
"tokenizer": "icu_tokenizer"
}
}
}
}
}
}
请注意,要在索引中使用它,您需要安装适当的插件:
bin/elasticsearch插件安装分析icu
将此添加到代码中:
curl -XPUT 'localhost:9200/test_ngram_2?pretty' -H 'Content-Type: application/json' -d'{
"settings": {
"index": {
"analysis": {
"analyzer": {
"customNgram": {
"type": "custom",
"tokenizer": "icu_tokenizer",
"filter": ["lowercase", "customNgram"]
}
},
"filter": {
"customNgram": {
"type": "edgeNGram",
"min_gram": "3",
"max_gram": "18",
"side": "front"
}
}
}
}
}
}'
通常,您会使用
标准
分析器搜索这样的自动完成,而不是使用icu标记器
将分析器添加到映射中(但不使用edengram
过滤器)并在搜索时将其应用于您的查询,或显式地将其设置为您应用于customNgram
的字段的search\u analyzer
。谢谢,我会对此进行研究。但我想仍然需要使ngram用于自动完成用例。我已经更新了我的答案,以说明如何将其应用于您的代码