使用 Elastic Search 中的完成建议查询检查是否为空
Checking for not null with completion suggester query in Elastic Search
我有一个现有查询,它为具有以下查询的邮政编码提供建议(我已经使用邮政编码将其硬编码为 T0L)
"suggest":{
"suggestions":{
"text":"T0L",
"completion":{
"field": "postcode.suggest"
}
}
}
这工作正常,但它会搜索城市包含空值的一些结果。所以我需要过滤城市不为空的地址。
所以我遵循了 this 上的解决方案并准备了这样的查询。
{
"query": {
"constant_score": {
"filter": {
"exists": {
"field": "city"
}
}
}
},
"suggest":{
"suggestions":{
"text":"T0L",
"completion":{
"field": "postcode.suggest"
}
}
}
}
但不幸的是,这没有给出邮政编码包含 T0L 的所需地址,而是我得到的结果是邮政编码以 A1X 开头.所以我相信它正在查询城市所在的所有地址并忽略完成建议查询。你能告诉我错误在哪里吗?或者可能是如何正确编写它。
无法在查询时过滤掉建议,因为 completion
suggester 使用 FST(在索引时构建的特殊内存数据结构)进行闪电般的快速搜索。
但是您可以更改您的映射并为您的建议者添加 context。上下文的基本思想,它也在索引时与 completion
字段一起填充,因此可以在查询时与 suggest
查询一起使用。
我有一个现有查询,它为具有以下查询的邮政编码提供建议(我已经使用邮政编码将其硬编码为 T0L)
"suggest":{
"suggestions":{
"text":"T0L",
"completion":{
"field": "postcode.suggest"
}
}
}
这工作正常,但它会搜索城市包含空值的一些结果。所以我需要过滤城市不为空的地址。
所以我遵循了 this 上的解决方案并准备了这样的查询。
{
"query": {
"constant_score": {
"filter": {
"exists": {
"field": "city"
}
}
}
},
"suggest":{
"suggestions":{
"text":"T0L",
"completion":{
"field": "postcode.suggest"
}
}
}
}
但不幸的是,这没有给出邮政编码包含 T0L 的所需地址,而是我得到的结果是邮政编码以 A1X 开头.所以我相信它正在查询城市所在的所有地址并忽略完成建议查询。你能告诉我错误在哪里吗?或者可能是如何正确编写它。
无法在查询时过滤掉建议,因为 completion
suggester 使用 FST(在索引时构建的特殊内存数据结构)进行闪电般的快速搜索。
但是您可以更改您的映射并为您的建议者添加 context。上下文的基本思想,它也在索引时与 completion
字段一起填充,因此可以在查询时与 suggest
查询一起使用。