是否可以在Elasticsearch中使用简单的自动填充功能?
我需要在搜索输入中输入单词的开头,我希望elasticsearch能够找到以它开头的所有单词。我希望Elasticsearch能够搜索我的类型中的所有字段(Post
,其中包含Title
,Body
,Tags
)。
在this example中,我需要添加特殊建议字段,即TitleSuggest
,BodySuggest
等,并指定输入和输出逻辑。
它还会返回Posts
的列表,而我只需要单词。
答案 0 :(得分:0)
据我所知,我会这样做:
{
"query" : {
"dis_max" : {
"tie_breaker" : 0,
"boost" : 1,
"queries" : [{
"wildcard" : {
"title" : "searchme*"
}
}, {
"wildcard"
: {
"body" : "searchme*"
}
}, {
"wildcard" : {
"tags" : "searchme*"
}
}
]
}
},
"aggs" : {
"title" : {
"terms" : {
"field" : "title",
"size" : 10
}
},
"body" : {
"terms" : {
"field" : "body",
"size" : 10
}
},
"tags" : {
"terms" : {
"field" : "tags",
"size" : 10
}
}
}
}
它搜索所有以" searchme"开头的数据。在字段中:标题,正文,标签,并返回每个10个术语的列表。
还有弹性自动完成但我从未使用它: https://www.elastic.co/guide/en/elasticsearch/guide/current/_index_time_search_as_you_type.html
答案 1 :(得分:0)
根据弹性问题跟踪器的一篇文章,也许您应该尝试这样的查询:
.Query(q =>
q.Text(tq => tq
.OnField(t => t.MyField1.Suffix("autocomplete"))
.QueryString(searchString)
)
&& q.Text(tq => tq
.OnField(t => t.MyField2.Suffix("autocomplete"))
.QueryString(searchString)
)
)