模糊查询
#前缀搜索:prefix
概念:以xx开头的搜索,不计算相关度评分。
注意:
前缀搜索匹配的是term,而不是field。
前缀搜索的性能很差
前缀搜索没有缓存
前缀搜索尽可能把前缀长度设置的更长
语法:
GET <index>/_search
{
"query": {
"prefix": {
"<field>": {
"value": "<word_prefix>"
}
}
}
}
index_prefixes: 默认 "min_chars" : 2, "max_chars" : 5
#通配符:wildcard
概念:通配符运算符是匹配一个或多个字符的占位符。例如,*通配符运算符匹配零个或多个字符。您可以将通配符运算符与其他字符结合使用以创建通配符模式。
注意:通配符匹配的也是term,而不是field
语法:
GET <index>/_search
{
"query": {
"wildcard": {
"<field>": {
"value": "<word_with_wildcard>"
}
}
}
}
#正则:regexp
概念:regexp查询的性能可以根据提供的正则表达式而有所不同。为了提高性能,应避免使用通配符模式,如.或 .?+未经前缀或后缀
语法:
GET <index>/_search
{
"query": {
"regexp": {
"<field>": {
"value": "<regex>",
"flags": "ALL",
}
}
}
}
#模糊查询:fuzzy
混淆字符 (box → fox)
缺少字符 (black → lack)
多出字符 (sic → sick)
颠倒次序 (act → cat)
语法
GET <index>/_search
{
"query": {
"fuzzy": {
"<field>": {
"value": "<keyword>"
}
}
}
}
#短语前缀:match_phrase_prefix
match_phrase:
match_phrase会分词
被检索字段必须包含match_phrase中的所有词项并且顺序必须是相同的
被检索字段包含的match_phrase中的词项之间不能有其他词项
概念:
match_phrase_prefix与match_phrase相同,但是它多了一个特性,就是它允许在文本的最后一个词项(term)上的前缀匹配,如果 是一个单词,比如a,它会匹配文档字段所有以a开头的文档,如果是一个短语,比如 "this is ma" ,他会先在倒排索引中做以ma做前缀搜索,然后在匹配到的doc中做match_phrase查询,(网上有的说是先match_phrase,然后再进行前缀搜索, 是不对的)
参数
analyzer 指定何种分析器来对该短语进行分词处理
max_expansions 限制匹配的最大词项
boost 用于设置该查询的权重
slop 允许短语间的词项(term)间隔:slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配 什么是相隔多远? 意思是说为了让查询和文档匹配你需要移动词条多少次?
标签:匹配,前缀,通配符,elasticsearch3,phrase,词项,match
From: https://www.cnblogs.com/rbcd/p/17447298.html