elasticsearch - Elasticsearch Completion Suggester:真正的标记化可能吗?
问题描述
如here所述,Elasticsearch中的一个字段,定义为“完成”类型以及某个分析器+标记器,首先根据这些部分的底层逻辑进行拆分,然后再次“缝合”在一起。但是我对这种行为非常不满意。
这是我当前的映射设置(摘录):
"mappings": {
"movie": {
"properties": {
"title": {
"analyzer": "standard",
"fields": {
"autocomplete": {
"type": "completion"
"analyzer": "whitespace",
}
},
"type": "string"
}
}
}
}
让我们以一部电影Harry Potter
为例:
当我输入前缀时,Har
我得到了建议Harry Potter
。相反,当我输入时Pot
,我根本没有得到任何结果,因为各个标记在分析/标记化后立即Harry
被Potter
缝合在一起。Harry Potter
现在我想要的是以下行为:当我输入时Pot
,我希望 Completion Suggester 返回Potter
。不是Harry Potter
,只是简单Potter
。这有可能吗?警告:我什至不需要对创建建议的文档的引用。因此,如果有可能以某种方式将所有生成的令牌放入一个容器中,然后从那里检索建议,那将是非常棒的(由于我必须做一些其他的事情)。
解决方案
我正在使用 edge_ngram 标记器做一些非常相似的事情。这是官方文档
您的设置需要包括以下内容:
{
"settings" : {
"index" : {
"number_of_shards" : "5",
"analysis" : {
"analyzer" : {
"autocomplete": {
"type": "custom",
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
}
并且您的映射需要改进,以便“分析器”:“自动完成”
推荐阅读
- python - Numpy - 在每行 og ma 中更改第一个非 nan 值
- flask - flask-sqlalchemy 读/写端点
- amazon-web-services - How can I create a VPC for EBS and RDS?
- or-tools - RoutingSearchParameters 的默认实例不起作用
- ios - 比较 Swift 中的数组内容
- c# - Unity:如何将功能转移到更小、更集中的类中
- string - 将列表模型中的所有值组合成一个字符串
- c# - WCF Web 服务未部署在 localhost ... web.config ... 端点上
- powershell - Powershell try/catch validate all test,如果其中一项测试验证失败,则退出循环并显示错误?
- python - Flask 应用无权写入 ubuntu 上的数据