gpt4 book ai didi

elasticsearch - 让 ElasticSearch 方面将多词字段内容视为原子术语

转载 作者:行者123 更新时间:2023-11-29 02:44:42 25 4
gpt4 key购买 nike

我正在使用 ElasticSearch,想知道我是否可以使用分面来检索我的结果的一些统计数据,更具体地说,我的结果中提到最多的人。我已经有一个包含该信息的字段。但是现在,当我想按多个单词对其进行分组时,我的方面结果会按术语打破该字段中的数据。

即:如果用户搜索 John,我想获取如下数据

   {
[...]
"facets" : {

"topPeople" : {
"_type" : "terms",
"missing" : 0,
"total" : 1739884,
"other" : 1705319,
"terms" : [ {
"term" : "John Smith",
"count" : 13954
}, {
"term" : "John Snow",
"count" : 1432
}, {
"term" : "John Baird",
"count" : 770
}]
}
}

相反,ElasticSearch 按术语分解结果并返回如下内容:

   {
[...]
"facets" : {

"topPeople" : {
"_type" : "terms",
"missing" : 0,
"total" : 1739884,
"other" : 1705319,
"terms" : [ {
"term" : "John",
"count" : 1739884
}, {
"term" : "Smith",
"count" : 13954
}, {
"term" : "Snow",
"count" : 1432
}]
}
}

我在某处看到,如果我将索引设置为不分析,ElasticSearch 应该返回完整的单词字符串。但是,我仍然希望用户能够在该字段上进行搜索。我想避免复制该字段以获得未分析的字段。有什么方法可以使用 ElasticSearch 对每个字段进行分组吗?

我目前正在使用以下方面查询:

{
"query" : {
[...]
},
"facets" : {
"topPeople" : {
"terms" : {
"field" : "people",
"size" : 3
}
}
}
}

最佳答案

您走在正确的轨道上。您需要一个未经分析的索引才能执行您的要求,但您不需要牺牲用户在该字段上的搜索方式。这里的答案(版本 < 1.x)是 Multi Field Type .对于您的示例,您希望映射看起来像这样:

    "topPeople" : {
"type" : "multi_field",
"fields" : {
"topPeople" : {"type" : "string", "index" : "analyzed"},
"raw" : {"type" : "string", "index" : "not_analyzed"}
}
}

当你搜索时,你可以继续在 topPeople 上搜索,但是当你分面时,你将在 topPeople.raw 上分面。

关于elasticsearch - 让 ElasticSearch 方面将多词字段内容视为原子术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17277258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com