我正在使用python 3中的基本弹性搜索库。
我有一个问题:
query = {
"query": {
"bool": {
"must": [{ "term": {"hostname": '"hal-pc"' } }]
}
}
}
我打电话给:
page = es.search(index = index_name, body=query, search_type='scan', scroll='2m')
但是我没有得到任何结果。我可以查询其他字段,所以我知道我的查询工作,但当我添加搜索值中带有连字符的字段时,我找不到任何东西。我怎么能逃脱这个角色?我知道使用普通的ES查询,您可以发送消息来配置ES以某些方式响应某些字符,但我不知道如何在python中执行此操作。
答案 0 :(得分:1)
如果在映射中分析字段hostname
,则elasticsearch不会按原样存储字段值。相反,它存储" hal-pc"作为两个单独的术语:" hal"和" pc"。因此,搜索" hal-pc"时可能无法获得该文档。使用term
过滤器。
您可以搜索" hal-pc"使用Match
查询来获取必要的结果。或者,通过不对字段hostname
字段进行分析并按原样使用term
查询。
{
"query": {
"match" : {
"hostname": "hal-pc"
}
}
}
但是,这也可能会返回主机名只是" hal"或只是" pc"同样。