给定下面的ElasticSearch文档:
{
"_id": "3330481",
"_type": "user",
"_source": {
"id": "3330481",
"project": "Cool_Project_One"
}
}
我正在构建一个UI组件,它将根据用户的文本输入自动向用户建议“project”字段中的所有值
例如:
当用户键入“Cool”时,我想向他显示“project”字段中以“Cool”开头的所有值
我已经创建了此聚合:
"aggs": {
"projects": {
"terms": {
"field": "project",
"size": 2
}
}
}
它返回一个包含项目字段所有值的列表,但我不明白如何只查找与特定表达式匹配的值。
我发现this answer显示了如何添加过滤器,但似乎过滤器只返回完全匹配,因为我试图这样做:
{
"aggs": {
"projects": {
"filter": {
"term": {
"project": "Cool"
}
},
"aggs": {
"terms": {
"field": "project",
"size": 2
}
}
}
}
}
但没有成功。
任何帮助都将不胜感激
1条答案
按热度按时间gajydyqb1#
一些注意事项:
1.术语查询将寻找精确匹配(包括大小写,如果你想要更灵活的东西,你可以使用常规的“匹配”查询
1.一般情况下,您要在查询中添加筛选器,而不是聚合
1.您可以使用聚合按类别类型字段进行分组,但也可以使用常规查询与标题类型字段进行匹配
我建议使用一个建议字段类型,也可以捕获前缀(项目por示例中的proj)。
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-as-you-type.html
我刚刚看到您定义了_type,所以您可能使用的是旧版本的Elasticsearch,而search_as_you_type相对较新。我将添加一些同时包含query和aggs的示例:
“按类型搜索”、“文本”和“关键字”字段的Map:
正在索引文档
search_as_you_type查询,支持现成的前缀:
常规查询,不区分大小写,您可以只写字段的一部分,并且将工作
额外的好处:前缀搜索没有search_as_you_type或设置ngrams: