Elasticsearch通配符不匹配数字

时间:2013-05-30 12:22:20

标签: elasticsearch

我使用以下查询字符串搜索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的限制还是我错过了什么?

1 个答案:

答案 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'在其中)

您可能希望将空格或关键字分析器与小写过滤器结合使用,以使其按您希望的方式工作。