【发布时间】:2019-06-13 13:27:12
【问题描述】:
我正在尝试实现一个需要使用 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"}
}}
}
但是,搜索词“آلما”会返回带有数据“آلمان خوب است”的文档。 我该如何解决这个问题?
非常感谢您的帮助。
【问题讨论】:
标签: elasticsearch search tokenize n-gram elasticsearch-analyzers