如何构建Elasticsearch以仅过滤带子域的URL?

时间:2017-02-04 20:52:04

标签: elasticsearch elasticsearch-query

我将URL存储为Elasticsearch中的字段。但是,我想只过滤url中包含子域的文档。

例如。

我希望我的搜索结果

http://any-subdomain.example.com

但我不希望结果

https://www.example.com

这在Elasticsearch查询中是否可行?

1 个答案:

答案 0 :(得分:1)

您是否尝试过query_string查询?例如,我用于下面的推特数据:

GET /twitter2/tweet/_search
{
    "query": {
        "query_string": {
           "default_field": "entities.media.url",
           "query": "https\\:\\/\\/t.co\\/* AND -https\\:\\/\\/t.co\\/6*"
        }
    },
    "_source": ["entities.media.url"]
}

对于此搜索我的映射:

PUT /twitter2/tweet/_mapping
{
    "properties": {
        "entities": {
            "properties": {
                "media": {
                    "properties": {
                        "url": {
                            "type": "string",
                            "index": "not_analyzed"
                        }
                    }
                }
            }
        }
    }
}

您可以对您的案例使用以下查询:

GET /your-index/your-type/_search
{
    "query": {
        "query_string": {
           "default_field": "url",
           "query": "http\\:\\/\\/*.example.com AND -http\\:\\/\\/www.example.com"
        }
    }
}
  

注意:如果您在将数据编入索引urlhost时使用某些内容,则应该知道可以更快地获得结果。使用弹性5.x,您可以使用摄取节点来操纵您的数据。我将尝试为此创建管道,但您可以查看the doc以获取更多信息