Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elasticsearch小写筛选器搜索_Search_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch - Fatal编程技术网 elasticsearch,Search,elasticsearch" /> elasticsearch,Search,elasticsearch" />

Elasticsearch小写筛选器搜索

Elasticsearch小写筛选器搜索,search,elasticsearch,Search,elasticsearch,我试图搜索我的数据库并能够使用大写/小写筛选词,但我注意到当query的应用分析器时,我不知道如何在过滤搜索上应用小写分析器。问题是: { "query": { "filtered": { "filter": { "bool": { "should": [ { "term":

我试图搜索我的数据库并能够使用大写/小写筛选词,但我注意到当
query
的应用分析器时,我不知道如何在过滤搜索上应用小写分析器。问题是:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "term": {
                                "language": "mandarin" // Returns a doc
                            }
                        },
                        {
                            "term": {
                                "language": "Italian" // Does NOT return a doc, but will if lowercased
                            }
                        }
                    ]
                }
            }
        }
    }
}
我有一个类型
语言
,我使用以下字母将其小写:

"analyzer": {
    "lower_keyword": {
        "type": "custom",
        "tokenizer": "keyword",
        "filter": "lowercase"
    }
}
以及相应的映射:

"mappings": {
    "languages": {
        "_id": {
            "path": "languageID"
        },
        "properties": {
            "languageID": {
                "type": "integer"
            },
            "language": {
                "type": "string",
                "analyzer": "lower_keyword"
            },
            "native": {
                "type": "string",
                "analyzer": "keyword"
            },
            "meta": {
                "type": "nested"
            },
            "language_suggest": {
                "type": "completion"
            }
        }
    }
}

问题在于,您有一个在索引期间分析过的字段,可以将其小写,但您正在对未分析的查询使用术语过滤器:

术语过滤器

筛选具有包含术语(未分析)的字段的文档。 与术语查询类似,只是它充当过滤器

我将尝试改用查询筛选器:

查询过滤器

包装要用作筛选器的任何查询。可以放置在查询中 它接受一个过滤器

例如:

{
    "constantScore" : {
        "filter" : {
            "query" : {
                "query_string" : {
                    "query" : "this AND that OR thus"
                }
            }
        }
    } }

这可以通过在字段中添加
.keyword
以查询字段的关键字版本来实现。假设语言是在映射中定义的,类型为
关键字

请注意,现在只有确切的文本会匹配:
普通话
不会匹配,而
意大利语
会匹配

您的查询结果如下:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "term": {
                                "language.keyword": "mandarin" // Returns Empty
                            }
                        },
                        {
                            "term": {
                                "language.keyword": "Italian" // Returns Italian.
                            }
                        }
                    ]
                }
            }
        }
    }
}
也允许组合术语值:

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "term": {
                                "language.keyword":
                                     ["mandarin", "Italian"]
                            }
                        }
                    ]
                }
            }
        }
    }
}

所以,如果我想让这个术语小写,我会把标记器改成小写的,然后重新索引所有的东西吗?不,由于小写过滤器,在索引过程中它已经是小写的了。问题是您需要使用一种也会分析的查询类型-术语过滤器不会。如果您只是将输入小写,以便可以继续使用术语过滤器而不是使用查询过滤器,您会看到更好的性能吗?