Как построить Elasticsearch для фильтрации только URL с поддоменом?

Я храню URL как поле в Elasticsearch. Однако я хотел бы отфильтровать только те документы, которые имеют поддомен в url,

Например.

Я хочу, чтобы мой результат поиска имел

http://any-subdomain.example.com

Но я не хочу, чтобы результат

https://www.example.com

Возможно ли это в запросе Elasticsearch?

1 ответ

Решение

Вы пробовали с query_string запрос? Например, я использовал для данных Twitter, как показано ниже:

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"
        }
    }
}

Примечание: вы должны знать, что вы можете получить свой результат быстрее, если будете использовать что-то для обработки при индексации данных как url а также host, С эластичным 5.x, вы можете использовать узел захвата для управления вашими данными, как это. Я постараюсь создать конвейер для этого, но вы можете проверить документацию для получения дополнительной информации

Другие вопросы по тегам