我将URL存储为Elasticsearch中的字段。但是,我想只过滤url
中包含子域的文档。
例如。
我希望我的搜索结果
http://any-subdomain.example.com
但我不希望结果
https://www.example.com
这在Elasticsearch查询中是否可行?
答案 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"
}
}
}
注意:如果您在将数据编入索引
url
和host
时使用某些内容,则应该知道可以更快地获得结果。使用弹性5.x,您可以使用摄取节点来操纵您的数据。我将尝试为此创建管道,但您可以查看the doc以获取更多信息