我正在尝试让Elasticsearch为一些文档编制索引以获取预先建议。据我所知,Elasticsearch中的边缘NGram处理由Lucene提供。不幸的是,Lucene在这方面的文档证明对我来说很难理解。我提出的最好的是基于https://gist.github.com/988923,但它似乎不起作用(具有这些设置的索引仅返回完整单词的匹配,就好像设置不存在一样):
{
"settings":{
"index":{
"analysis":{
"analyzer":{
"typeahead_analyzer":{
"type":"custom",
"tokenizer":"edgeNGram",
"filter":["typeahead_ngram"]
}
},
"filter":{
"typeahead_ngram":{
"type":"edgeNGram",
"min_gram":1,
"max_gram":8,
"side":"front"
}
}
}
}
}
}
我真的根本不知道分析仪,标记器和滤波器是如何组合在一起的 - 我是否还想要一个过滤器?我应该只有一个标记器吗?在索引要使用的文档时,是否必须引用这些设置?如何找出Lucene下面用于给定索引的设置?我该如何调试?帮助: - )
答案 0 :(得分:1)
我使用edgeNGram解决了这个问题。下面是我用来实现这一目标的映射和分析。
{
"analysis": {
"analyzer": {
"str_search_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase"
]
},
"str_index_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"substring"
]
}
},
"filter": {
"substring": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 10,
"side": "front"
}
}
}
}
{
"index_name": {
"properties": {
"location": {
"type": "geo_point"
},
"name": {
"type": "string",
"index": "analyzed",
"search_analyzer": "str_search_analyzer",
"index_analyzer": "str_index_analyzer"
}
}
}
}
一个重要的注意事项是我需要使用与AND运算符匹配的查询来正确查询。
希望这有帮助。