我想使用 EdgeNGram 分析器对字段进行不区分大小写的搜索。我通过elastica在 php 中使用 ES 。
我有用户表
{
"user": {
"analyzer": "analyzer_edgeNGram",
"properties": {
"admin": {
"type": "boolean"
},
"firstName": {
"type": "string",
"analyzer": "analyzer_edgeNGram"
},
"lastName": {
"type": "string",
"analyzer": "analyzer_edgeNGram"
},
"username": {
"type": "string",
"analyzer": "analyzer_edgeNGram"
}
}
}
}
我的分析器看起来像这样(你可以看到 egdeNGram 分析器中有小写过滤器)
"index.analysis.filter.asciifolding.type": "asciifolding",
"index.number_of_replicas": "1",
"index.analysis.filter.standard.type": "standard",
"index.analysis.tokenizer.edgeNGram.token_chars.1": "digit",
"index.analysis.tokenizer.edgeNGram.max_gram": "10",
"index.analysis.analyzer.analyzer_edgeNGram.type": "custom",
"index.analysis.tokenizer.edgeNGram.token_chars.0": "letter",
"index.analysis.filter.lowercase.type": "lowercase",
"index.analysis.tokenizer.edgeNGram.side": "front",
"index.analysis.tokenizer.edgeNGram.type": "edgeNGram",
"index.analysis.tokenizer.edgeNGram.min_gram": "1",
"index.analysis.tokenizer.standard.type": "standard",
"index.analysis.analyzer.analyzer_edgeNGram.filters": "standard,lowercase,asciifolding",
"index.analysis.analyzer.analyzer_edgeNGram.tokenizer": "edgeNGram",
"index.number_of_shards": "1",
"index.version.created": "900299"
例如,有名字 Miroslav 的用户。如果我这样查询
{"query": {"match": {"firstName": "miro"}}}
我有 0 次点击。但是,如果我将查询 miro 更改为 Miro,它会找到。我检查了令牌是如何生成的,它们区分大小写:M、Mi、Mir、...
任何建议如何实现不区分大小写的搜索?谢谢