如何在elasticsearch中按数组元素搜索?

Che*_*tEx 7 arrays indexing elasticsearch

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

{
    "content":"Some content with @someone mention",
    "mentions":["someone"],
    "userId":"4dff31eaf8815f4df04e2d62"
}
Run Code Online (Sandbox Code Playgroud)

我尝试用查询找到它:

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                term: {"mentions":"someone"}
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

没有收到任何结果.

同时查询内容工作正常:

{
    "query": {
        "filtered": {
            "filter": { "term":{"userId":"4dff31eaf8815f4df04e2d62"} },
            "query": {
                "term": {"content":"some"}
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

搜索数组需要一些特殊的语法吗?我发现了几个课题[ 1,2 ]关于elasticsearch阵列,但没有直接回答.

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

{
    "records": {
        "all":{
            "properties":{
                "content":{"type":"string"},
                "userId":{"type":"string"},
                "mentions":{"type":"string"}
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

mah*_*off 2

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

如果导入带有“mentions”数组的文档,则搜索匹配的数组项并将其称为“mentions”,将检索该文档。我也遇到了同样的问题,刚才自己验证了一下。