如何在Python弹性搜索中转义连字符

时间:2017-02-14 16:01:40

标签: python python-3.x elasticsearch

我正在使用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中执行此操作。

1 个答案:

答案 0 :(得分:1)

如果在映射中分析字段hostname,则elasticsearch不会按原样存储字段值。相反,它存储" hal-pc"作为两个单独的术语:" hal"和" pc"。因此,搜索" hal-pc"时可能无法获得该文档。使用term过滤器。

您可以搜索" hal-pc"使用Match查询来获取必要的结果。或者,通过不对字段hostname字段进行分析并按原样使用term查询。

{
    "query": {
        "match" : {
            "hostname": "hal-pc"
        }
    }
}

但是,这也可能会返回主机名只是" hal"或只是" pc"同样。