我使用以下查询字符串搜索elasticsearch索引:
curl -XGET 'http://localhost:9200/index/type/_search' -d '{
"query": {
"query_string" : {
"default_field" : "keyword",
"query" : "file*.tif"
}
}
}'
关键字字段的架构如下:
"keyword" : {"type" : "string", "store" : "yes", "index" : "analyzed" }
上述查询的问题是,在检索到file001_copy.tif时,它不会检索像file001.tif这样的关键字的结果。 Match
查询正在正确检索结果。这是Query_String
的限制还是我错过了什么?
答案 0 :(得分:1)
您可以通过分析要编制索引的字符串
来查看问题curl "localhost:9200/_analyze" -d "file001.tif" | python -mjson.tool
{
"tokens": [
{
"end_offset": 7,
"position": 1,
"start_offset": 0,
"token": "file001",
"type": "<ALPHANUM>"
},
{
"end_offset": 11,
"position": 2,
"start_offset": 8,
"token": "tif",
"type": "<ALPHANUM>"
}
]
}
curl "localhost:9200/_analyze" -d "file001_copy.tif" | python -mjson.tool
{
"tokens": [
{
"end_offset": 16,
"position": 1,
"start_offset": 0,
"token": "file001_copy.tif",
"type": "<ALPHANUM>"
}
]
}
标准分析器file001.tif将令牌分为 file001 和 tif
但不是file001_copy.tif。所以当你去搜索文件时它只能击中file001_copy.tif,因为它唯一符合你标准的东西(必须有一个标记,其中'文件'+ 0或更多字符并且'tif'在其中)
您可能希望将空格或关键字分析器与小写过滤器结合使用,以使其按您希望的方式工作。