Как построить 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, вы можете использовать узел захвата для управления вашими данными, как это. Я постараюсь создать конвейер для этого, но вы можете проверить документацию для получения дополнительной информации