7

我有一个在 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”。

4

1 回答 1

2

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

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

于 2012-08-10T16:51:43.397 回答