gpt4 book ai didi

node.js - 如何使用elasticsearch进行多个字段的搜索?

转载 作者:太空宇宙 更新时间:2023-11-03 23:21:25 24 4
gpt4 key购买 nike

如何使用elasticsearch搜索多个字段?我尝试了很多查询,但没有一个成功。我希望搜索不区分大小写,并且一个字段比另一个字段更重要。我的查询如下所示:

const eQuery = {
query: {
query_string: {
query: `*SOME_CONTENT_HERE*`,
fields: ['title^3', 'description'],
default_operator: 'OR',
},
},
}
esClient.search(
{
index: 'movies',
body: eQuery,
},
function(error, response) {
},
)

映射如下:

{
mappings: {
my_index_type: {
dynamic_templates: [{ string: { mapping: { type: 'keyword' }, match_mapping_type: 'string' } }],
properties: {
created_at: { type: 'long' },
description: { type: 'keyword' },
title: { type: 'keyword' },
url: { type: 'keyword' },
},
},
_default_: {
dynamic_templates: [{ string: { mapping: { type: 'keyword' }, match_mapping_type: 'string' } }],
},
},
}

最佳答案

问题在于字段描述和标题映射中的type: keywords。不分析关键字类型字段,即它们存储的索引数据与发送到弹性的数据完全相同。当您想要匹配唯一 ID 等内容时,它就会派上用场。阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html

您应该阅读有关elasticsearch 分析器的内容。您可以非常轻松地创建自定义分析器,它可以以不同的方式更改您发送给它们的数据,例如在索引或搜索之前将所有内容小写。幸运的是,有针对小写等基本操作的预配置分析器。如果您将描述和标题字段的类型更改为 type: text,您的查询将有效。阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html

此外,我看到您为索引配置了动态模板。因此,如果您没有显式指定索引的映射,则所有字符串字段(如描述和标题)都将被视为 type: 关键字。如果您像这样构建索引:

PUT index_name
{
"mappings": {
index_type: {
"properties": {
"description": {"type": "text"},
"title": {"type": "text"}, ...
}
}
}
}

你的问题应该可以解决。这是因为 type: 文本字段默认由标准分析器进行分析,该分析器会小写输入等。阅读:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html

关于node.js - 如何使用elasticsearch进行多个字段的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49282533/

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