我正在进行搜索,该搜索应返回与该主机匹配的所有文档。
当我搜索db.no, vg.no
和仅包含单词的其他主机时,这种方法有效。如果我搜索包含-
或数字的主机(h-a.no),那么ES不会返回任何内容。即使我知道存在与该主机匹配的文档。
主机字段id映射为字符串。
您是否知道为什么我能够使用q-param查找文档,但不能使用bool查询过滤器?
普通查询会返回与h-a.no
匹配的文档$ curl -XGET 'http://docker:9200/harvester-test/entries/_search?pretty&q="h-a.no"'
{
"took" : 10,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 0.43920785,
"hits" : [ {
"_source":{
"__v":0,
"host":"h-a.no",
// [snipp..]
布尔查询
{
"sort": {
"posted": "desc"
},
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"bool": {
"should": [
{}
]
}
},
{
"bool": {
"should": [
[
{
"term": {
"host": "h-a.no"
}
}
]
]
}
},
{
"bool": {
"must_not": [
{}
]
}
},
{
"bool": {
"must_not": [
{}
]
}
},
{
"bool": {
"must": [
{}
]
}
},
{
"bool": {
"must": [
{}
]
}
}
]
}
}
}
},
"aggs": {
"itemscount": {
"global": {}
}
}
映射
{
"harvester" : {
"mappings" : {
"entries" : {
"properties" : {
"__v" : {
"type" : "long"
},
"createdAt" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"description" : {
"type" : "string"
},
"externalId" : {
"type" : "string"
},
"fields" : {
"properties" : {
"description" : {
"type" : "string"
},
"duration" : {
"type" : "string"
},
"image" : {
"type" : "string"
},
"ingress" : {
"type" : "string"
}
}
},
"guid" : {
"type" : "string"
},
"host" : {
"type" : "string"
},
"id" : {
"type" : "string"
},
"image" : {
"type" : "string"
},
"modifiedDate" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"origin" : {
"type" : "string"
},
"posted" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"ranking" : {
"type" : "long"
},
"source" : {
"type" : "string"
},
"tags" : {
"type" : "string"
},
"title" : {
"type" : "string"
},
"updateTime" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"url" : {
"type" : "string"
}
}
}
}
}
}
答案 0 :(得分:0)
我检查了主机h-a.no
的分析方式:
curl 'http://dockerhost:9200/_analyze?analyzer=standard&pretty' -d 'h-a.no'
{
"tokens" : [ {
"token" : "h",
"start_offset" : 0,
"end_offset" : 1,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "a.no",
"start_offset" : 2,
"end_offset" : 6,
"type" : "<ALPHANUM>",
"position" : 2
} ]
}
然后我将主机字段的映射更新为"index": "not_analyzed"
,以确保该域未被拆分为较小的部分。