我有一个以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"}
}
}
}
}
搜索数组是否需要一些特殊语法?我在弹性搜索中找到了几个关于数组的主题[1,2],但没有直接答案。
UPD 获取映射调用会返回下一个结果:
{
"records": {
"all":{
"properties":{
"content":{"type":"string"},
"userId":{"type":"string"},
"mentions":{"type":"string"}
}
}
}
}
UPD2 我找到了问题的根源。我不小心在我的问题中引入了一个错误。我在DB中实际拥有的用户名是“some_one”(下划线很重要)。因此,标准索引将其拆分为2个单词并查询导致失败的“some_one”。
答案 0 :(得分:2)
这是正确的用法,因为您的更新提及。
如果导入带有“mentions”数组的文档,则搜索匹配的数组项(将其称为“mentions”)将检索该文档。我有同样的问题,现在就自己验证了。