我们已将hunspell过滤器添加到弹性搜索实例中。没什么好看的......
{
"index" : {
"analysis" : {
"tokenizer" : {
"comma" : {
"type" : "pattern",
"pattern" : ","
}
},
"filter": {
"en_GB": {
"type": "hunspell",
"language": "en_GB"
}
},
"analyzer" : {
"comma" : {
"type" : "custom",
"tokenizer" : "comma"
},
"en_GB": {
"filter": [
"lowercase",
"en_GB"
],
"tokenizer": "standard"
}
}
}
}
}
现在我们似乎已经失去了使用引号进行完全匹配查询的内置工具。所以寻找" lace"也会对" lacy"进行同等分数的搜索。例如。我理解这包括hunspell,但我希望能够通过使用引号强制完全匹配
我正在为此做布尔查询。沿着(在java中)
的方式"bool" : {
"must" : {
"query_string" : {
"query" : "\"lace\"",
"fields" :
...
或(邮递员直接到9200 ......
{
"query" : {
"query_string" : {
"query" : "\"lace\"",
"fields" :
....
这可能吗?我猜这可能是我们在tokaniser中会做的事情,但我不太确定从哪里开始......?
答案 0 :(得分:1)
您将无法处理此令牌化程序级别,但您可以在映射级别调整配置以使用multi-fields,您可以保留不会被分析的相同字段的副本,稍后在查询中使用此字段支持你的用例。
您可以更新映射,如下所示
"mappings": {
"desc": {
"properties": {
"labels": {
"type": "string",
"analyzer": "en_GB",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
Furthur修改您的查询以搜索原始字段而不是分析字段。
{
"query": {
"bool": {
"must": [{
"query_string": {
"default_field": "labels.raw",
"query": "lace"
}
}]
}
}
}
希望这会有所帮助 感谢