【问题标题】:How to search by array elements in elasticsearch?如何在elasticsearch中按数组元素进行搜索?
【发布时间】:2011-09-21 21:24:13
【问题描述】:

我有一个在 elasticsearch 中被索引的文档:

{
    "content":"Some content with @someone mention",
    "mentions":["someone"],
    "userId":"4dff31eaf8815f4df04e2d62"
}

我尝试通过查询找到它:

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                term: {"mentions":"someone"}
            }
        }
    }
}

并且没有收到任何结果。

同时查询内容工作正常:

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                "term": {"content":"some"}
            }
        }
    }
}

搜索数组需要一些特殊的语法吗?我在elasticsearch中找到了几个关于数组的主题[1,2],但没有直接的答案。

UPD Get Mapping 调用返回下一个结果:

{
    "records": {
        "all":{
            "properties":{
                "content":{"type":"string"},
                "userId":{"type":"string"},
                "mentions":{"type":"string"}
            }
        }
    }
}

UPD2 我找到了问题的根源。我不小心在我的问题中引入了一个错误。我在 DB 中实际使用的用户名形式为“some_one”(下划线很重要)。因此标准索引将其拆分为 2 个单词并查询导致失败的“some_one”。

【问题讨论】:

  • 我无法使用默认设置/映射重现它。该字段的映射是什么?
  • @imotov AFAIK 没有任何非默认映射。我用“get mapping”api 调用结果更新了问题。
  • 这就是我在我的机器上运行它时的样子:gist.github.com/1048874 你得到不同的结果吗?我还注意到第一个查询中的术语没有被引号包围。这会是个问题吗?
  • @imotov 我在发布此问题时犯了一个错误(请参阅 upd2)。但是谢谢你,如果没有你的例子,我会更新做正确的实验。

标签: arrays indexing elasticsearch


【解决方案1】:

正如您的更新所提到的,这是正确的用法。

如果您使用“提及”数组导入文档,则搜索匹配的数组项(将其称为“提及”)将检索该文档。我也遇到了同样的问题,刚刚自己验证过了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    相关资源
    最近更新 更多