在弹性搜索中选择一行

时间:2017-12-06 06:24:21

标签: elasticsearch elasticsearch-mapping

我的映射如下,

mapping = {
        "mappings":{
          "document": {
            "properties": {
               "title": {"type": "text"},
               "users": {
                "type": "nested",
                "properties": {
                    "user_id": {"type": "integer"},
                    "name": {"type": "text"},
                }
            }
        }
    }
}

我可以添加数据,但是当我使用

搜索时
res = es.search(index="test", body={"query": {
    "nested": {
        "path": "users", "query": {
            "match": {'users.user_id': 1}
        }
    }
}
}

它返回整个文档而不是特定的行。

更多信息:

我正在为弹性搜索提供一张桌子:

  

user_id |名称

     

1 ............. Joe

     

2 ............玛丽

如果我在搜索中将1作为user_id,我需要弹性搜索才能返回{user_id:1,name:Joe}

1 个答案:

答案 0 :(得分:1)

你应该看一下他们使用的Nested Query bool>在通过文档上的嵌套对象进行过滤时必须。 此外,当您需要过滤时,请使用 term 而不是 match 。匹配用于全文搜索

尝试这样

res = es.search(index="test", body={"query": {
        "nested": {
            "path": "users", 
            "query": {
                "bool": {
                    "must": [
                        {                           
                            term": {
                                'users.user_id': 1
                            }
                        }
                    ]
                }
            }
        }
    }
}