我正在尝试对多个(7)字段进行查询,并且需要在所有位置(结束,开始,中间)支持通配符。我使用的是query_string:
{ "query_string": { "query": "ABCD-EFGH",
"fields": [ "f1^5", "f2", "f3", "f4", "f5", "f6" ] }}
f1..f7是使用此分析器的字符串:
"analyzer": {
"uppercaseAnalyzer": {
"tokenizer": "keyword",
"filter": [ "uppercase" ]
}
所以这很好用,通配符工作正常。但是,某些查询可能包含空格,因此:
{ "query_string": { "query": "AB CD EFGH",
"fields": [ "f1^5", "f2", "f3", "f4", "f5", "f6" ] }}
失败。用户将输入“ab cd efgh”,我需要返回“ab cd efgh”。我有点使用“查询”:“\”ab cd efgh \“”,但这打破了通配符。
任何解决方案?我看到一些关于使用反斜杠转义空格的旧文章,但这会在2.3中产生错误。
如果我必须索引没有空格的f1..f7的第二个副本,那么这将使我的索引的大小加倍。
如果我使用通配符而不是query_string,它会按预期工作,但性能会受损。