【发布时间】: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