0

我正在使用以下查询字符串搜索弹性搜索索引:

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还是我错过了什么?

4

1 回答 1

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 将令牌拆分为file001tif

但 file001_copy.tif 不是。因此,当您搜索文件时,它只会点击 file001_copy.tif,因为它是唯一符合您条件的东西(必须有一个包含“文件”+ 0 个或更多字符和“tif”的令牌)

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

于 2013-05-31T04:53:15.957 回答