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