【发布时间】:2018-01-02 13:06:58
【问题描述】:
我很难让基于地址的索引返回结果,就像自动完成一样,我一直在尝试两种不同的方法,我开始尝试使用 nGram 和自定义分析器,但我真的很难获得相关结果以显示使用地址自动完成时的预期。
我关注的第二种方法是查看随附的完成建议程序 elasticsearch 是否更容易开始工作,但我似乎在各个方向都遇到了障碍。
我们根据每次按键时的输入值发送常规客户端 API 调用。
我似乎面临的问题是......我没有返回足够相关的结果,如果/当它们相关时,附加字符部分单词可能会强制不返回任何结果。
以下地址为示例:7 West Hill Gardens, West Hill EX9 6BL
我的文档是这样存储的:
完成建议
"id": "1",
"address": "7, Westhill Gardens, Bromyard HR74HW",
"suggest": "7, Westhill Gardens, Bromyard HR74HW"
完成建议映射:
{
"mappings": {
"addresses": {
"properties": {
"suggest": {
"type": "completion",
"preserve_separators": false,
"analyzer": "standard",
"search_analyzer": "standard"
},
"address": {
"type": "text"
},
"id": {
"type": "keyword"
}
}
}
}
}
请注意,我在建议器中将 preserve_separators 设置为 false 以允许将西山也匹配为西山,这在建议器上运行良好,但是在我的 nGram 索引中,我不确定如何使用映射启用相同的功能我相信这可能是我没有返回相关结果的问题的一部分。
当我使用以下查询查询7 westhill gardens 时,建议者是:
{
"suggest": {
"suggestions": {
"prefix": "7 westhill gardens",
"completion": {
"field": "suggest",
"fuzzy": {
"fuzziness": 2 // Also tried with no fuzzy and fuzziness: 1
}
}
}
}
}
返回如下结果:
"address": "7, Westhill Gardens, Brackley NN136AA",
"address": "7, Westhill Gardens, Bromyard HR74HW",
"address": "7, West Hill Gardens, West Hill, Budleigh Salterton EX96BL",
但是,如果我从查询中删除数字 7 并执行此查询,它不会返回任何结果,这是一个关键问题,因为并非所有用户都会使用给定的门牌号开始他们的查询,执行搜索为 west hill gardens 与 7 west hill gardens 相对应
{
"suggest": {
"suggestions": {
"prefix": "westhill gardens",
"completion": {
"field": "suggest",
"fuzzy": {
"fuzziness": 2
}
}
}
}
}
最后,如果我只查询如下所示的门牌号,则不会返回任何结果。
{
"suggest": {
"suggestions": {
"prefix": "7 EX9 6BL",
"completion": {
"field": "suggest",
"fuzzy": {
"fuzziness": 2
}
}
}
}
}
我希望比我有更多经验的人能够对最佳方法是什么以及我是否应该坚持使用 nGrams 并尝试让自定义分析器/过滤器方法正常工作提出一些想法。或者我只是在这样做完全错了?!我才刚刚开始学习 elasticsearch,所以如果我的术语不正确,我向您致歉。
【问题讨论】:
标签: elasticsearch indexing autocomplete lucene mapping