我是Elastic search的新手,我正在尝试使用空白分析器创建一个完成建议器的演示。
根据Whitespace Analyzer的文档,它会中断文本 无论什么时候遇到空白字符。所以我的 问题是它是否也适用于完成建议者?
所以对于我的完成建议者前缀:" ela", 我期待输出 as"你好弹性搜索。"
我知道一个简单的解决方案是添加多字段输入:
"suggest": {
"input": ["Hello","elastic","search"]
}
但是,如果这是解决方案那么使用分析仪的意义是什么?分析仪在完成建议器中是否有意义?
我的映射:
{
"settings": {
"analysis": {
"analyzer": {
"completion_analyzer": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "whitespace"
}
}
}
},
"mappings": {
"my-type": {
"properties": {
"mytext": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"suggest": {
"type": "completion",
"analyzer": "completion_analyzer",
"search_analyzer": "completion_analyzer",
"max_input_length": 50
}
}
}
}
}
我的文件:
{
"_index": "my-index",
"_type": "my-type",
"_id": "KTWJBGEBQk_Zl_sQdo9N",
"_score": 1,
"_source": {
"mytext": "dummy text",
"suggest": {
"input": "Hello elastic search."
}
}
}
搜索请求:
{
"suggest": {
"test-suggest" : {
"prefix" :"ela",
"completion" : {
"field" : "suggest",
"skip_duplicates": true
}
}
}
}
此搜索未向我返回正确的输出,但如果我使用prefix =' hel'我得到了正确的输出:"你好弹性搜索。"
简而言之,我想知道空白分析器是否与完成建议器一起工作? 如果有办法,请你建议我。
PS:我已经找到了这个链接,但我没有找到有用的答案。
ElasticSearch completion suggester Standard Analyzer not working
What Elasticsearch Analyzer to use for this completion suggester?
我觉得此链接很有用Word-oriented completion suggester (ElasticSearch 5.x)。但他们没有使用完成建议器。
提前致谢。
吉米
答案 0 :(得分:2)
完成提示器无法执行全文查询,这意味着它无法基于多词字段中间的词返回建议。
来自ElasticSearch本身:
原因是FST查询与全文查询不同。我们无法在短语中的任何地方找到单词。相反,我们必须从图的左侧开始并向右移动。
正如您所发现的,可以与字段中间匹配的完成建议的最佳选择是边缘n-gram过滤器。
答案 1 :(得分:1)
我知道这个问题已经存在很久了,但是您是否尝试过提出多个建议,一个基于前缀,另一个基于正则表达式?
类似
{
"suggest": {
"test-suggest-exact" : {
"prefix" :"ela",
"completion" : {
"field" : "suggest",
"skip_duplicates": true
}
},
"test-suggest-regex" : {
"regex" :".*ela.*",
"completion" : {
"field" : "suggest",
"skip_duplicates": true
}
}
}
}
当第一个为空时,使用第二个建议的结果。好消息是Elasticsearch建议返回有意义的短语。
基于单板的方法,使用完整的查询搜索,然后基于搜索词进行汇总有时会给出断句,这在上下文上是错误的。如果您有兴趣,我可以写更多。