gpt4 book ai didi

c# - Elasticsearch-嵌套-映射-多目标别名或仅指定每个文档要使用的1个多字段子字段

转载 作者:行者123 更新时间:2023-12-03 02:27:54 32 4
gpt4 key购买 nike

我们有一个想要从solr迁移到elasticsearch的应用程序。我正在努力寻找执行以下操作的正确方法(我们有10个这样的字段)。

我们有一个文本字段,该文本字段将根据语言使用某些分析器进行索引和搜索。但是需要使用相同的名称进行搜索。因此,在Solr中,我们可以拥有一个“title_fr”和“title_en”字段,并具有一个别名设置,该别名设置将在我们搜索“title”字段时返回/搜索这两个字段,但在任何时间点,我们只会填充其中一个字段每个文档,所以这可行。

现在我知道在Elasticsearch中一个别名只能有1个目标,因此我开始研究多字段。但是,我可以看到的多字段问题是它存储,创建并为其中的每个子字段建立索引。因此,如果我有一个名为title的多字段,然后是一个名为title.en的子字段,又有一个名为title.fr的子字段,那么如果我添加一个标题的索引,它将使用指定的分析器添加到title.en和title.fr中。这成为一个问题,因为标题搜索将触发搜索分析器同时搜索两者,并以相反的语言返回潜在的误报。更不用说它还使我们的索引大小增加了一倍。

我看到的其他选项是为每种语言创建索引并创建交叉索引别名。

如果有帮助,我也使用C#Nest来完成这项工作。

最佳答案

您可以将title_fr和title_en作为单独的字段

对应:

"mappings":{
"properties":{
"title_fr":{
"type":"text",
"analyzer":<your_analyzer>
},
"title_en":{
"type":"text",
"analyzer":<your_analyzer>
}
}
}

您也可以将它们设置为对象或嵌套类型
"title":{
type:"object",
"properties":{
"title_fr":{
"type":"text",
"analyzer":"your_analyzer"
},
"title_en":{
"type":"text",
"analyzer":"your_analyzer"
}
}
}


elasticsearch中有许多选项可用于查询多个字段上的文本
例如
您可以使用 multi_match
{
"query": {
"multi_match" : {
"query": "<text>",
"fields": [ "title_fr", "title_en" ] --> or title.title_fr,title.title_en
}
}
}


Query_string
{
"query" : {
"query_string" : {
"query" : "<text>",
"fields" : [ "title_fr", "title_en" ] --> or title.title_fr,title.title_en
}
}
}

关于c# - Elasticsearch-嵌套-映射-多目标别名或仅指定每个文档要使用的1个多字段子字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60655407/

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