我正在尝试搜索我的数据库,并且能够使用大写/小写过滤条件,但我注意到query
应用分析器时,我可以'弄清楚如何在过滤搜索上应用小写分析器。这是查询:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"language": "mandarin" // Returns a doc
}
},
{
"term": {
"language": "Italian" // Does NOT return a doc, but will if lowercased
}
}
]
}
}
}
}
}
我有一个类型languages
我使用小写:
"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"
}
}
}
}
答案 0 :(得分:8)
问题是您在索引期间已经分析了一个字段以小写它,但是您使用的术语过滤器用于未分析的查询:
期限过滤
过滤包含字词(未分析)的字段的文档。 与术语查询类似,不同之处在于它充当过滤器。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-term-filter.html
我尝试使用查询过滤器:
查询过滤器
包装任何用作过滤器的查询。可以放在查询中 接受过滤器。
示例:
{
"constantScore" : {
"filter" : {
"query" : {
"query_string" : {
"query" : "this AND that OR thus"
}
}
}
} }
答案 1 :(得分:0)
这可以通过在字段中附加extension=php_mcrypt.dll
来查询字段的关键字版本来实现。假设在映射中使用类型.keyword
定义了语言。
请注意,现在仅精确的文本将匹配:keyword
将不匹配,而mandarin
将匹配。
您的查询最终将如下所示:
Italian
还可以组合术语值:
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"language.keyword": "mandarin" // Returns Empty
}
},
{
"term": {
"language.keyword": "Italian" // Returns Italian.
}
}
]
}
}
}
}
}