我正在尝试实现一个搜索系统,在其中我需要使用Edge NGRAM Tokenizer。创建索引的设置如下所示。我在文档和搜索查询中都使用了相同的标记程序。(文件使用佩里桑语)
PUT /test
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "autocomplete"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge-ngram",
"min_gram": 2,
"max_gram": 10,
"token_chars": [
"letter"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
}当我在文档中搜索术语“آلمانی”时,当我有一个带有数据的文档:‘آلمانخوباست’.时,当我得到0次点击(结果)时,问题就出现了。
如您所见,分析术语'آلمانی‘的结果显示,它生成令牌'آلمان’并正常工作。
{
"tokens" : [
{
"token" : "آ",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آل",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلم",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلما",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلمان",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "آلمانی",
"start_offset" : 0,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 0
}
]
}下面显示的搜索查询有0次点击。
GET /test/_search
{
"query": {"match": {
"title": {"query": "آلمانی" , "operator": "and"}
}}
}然而,搜索术语'آلما‘返回带数据’آلمانخوباست‘的文档。我怎样才能解决这个问题?
您的协助将不胜感激。
发布于 2019-01-20 08:53:48
我发现里卡多·海克( Ricardo )的DevTicks帖子解决了我的问题。输入链接以获得更详细的说明。
我更改了映射设置如下:
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search",
"fields": {
"ngram": {
"type": "text",
"analyzer": "autocomplete"
}
}
}
}
}
}现在我通过搜索“آلمانخوباست”这个词得到了"آلمانی“博士。
https://stackoverflow.com/questions/54268240
复制相似问题