【问题标题】:How to search through multiple fields with elasticsearch?如何使用elasticsearch搜索多个字段?
【发布时间】:2018-03-15 01:00:15
【问题描述】:

如何使用 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' } }],
        },
    },
}

【问题讨论】:

  • 你也应该写下你得到的错误
  • 我没有收到任何错误。只是一个空洞的回应 - 不幸的是。
  • 哦,在这种情况下,您应该发布您的映射和失败的确切查询。此外,如果您显示您希望返回的 ES 索引中的文档,那就太好了。
  • 所以我发现问题在于查询区分大小写。我不知道如何使它不区分大小写
  • 索引的映射应该指出问题所在。如果在两个字段上都使用标准分析器,应该没问题,因为它会将索引值和传入查询都小写

标签: node.js elasticsearch query-string


【解决方案1】:

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

您应该阅读有关弹性搜索分析器的信息。您可以非常轻松地创建自定义分析器,它可以以不同的方式更改您发送给它们的数据,例如在索引或搜索之前将所有内容小写。 幸运的是,有用于基本操作(例如小写)的预配置分析器。如果您将描述和标题字段的类型更改为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

【讨论】:

  • 它可以正常工作。非常感谢你的帮助和很棒的解释——我学到了很多。我肯定会读到有关分析器的文章
  • 很高兴为您提供帮助:)
猜你喜欢
  • 2013-09-12
  • 2018-12-22
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多