我将首先在映射级别解决这个问题。关键字标记器将使您的整个字段成为单个标记,然后添加小写过滤器将使所有内容小写...使字段不区分大小写:
"analysis":{
"analyzer":{
"analyzer_firstletter":{
"tokenizer":"keyword",
"filter":"lowercase"
}
}
插入一些数据后,这就是索引的内容:
$ curl -XGET localhost:9200/test2/tweet/_search -d '{
"query": {
"match_all" :{}
}
}' | grep title
"title" : "river dog"
"title" : "data"
"title" : "drive"
"title" : "drunk"
"title" : "dzone"
请注意条目“river dog”,这是您要避免匹配的条目。现在,如果我们使用match_phrase_prefix
查询,您将只匹配以 'd' 开头的那些:
$ curl -XGET localhost:9200/test2/tweet/_search -d '{
"query": {
"match_phrase_prefix": {
"title": {
"query": "d",
"max_expansions": 5
}
}
}
}' | grep title
"title" : "drive"
"title" : "drunk"
"title" : "dzone"
"title" : "data"
这不是 Elastica 特有的,但它应该很容易转换为适当的命令。重要的部分是keyword
+lowercase
分析器,然后使用match_phrase_prefix
查询。
作为旁注,通配符非常慢,最好尽可能避免:)