Elasticsearch提供了丰富的高级检索语法,包括但不限于term
、prefix
、wildcard
、fuzzy
和boost
等。以下是对这些检索类型的详细介绍及实战示例:
1. Term查询
- 作用:精确匹配指定字段的精确值。
- 示例:
GET /my_index/_search
{
"query": {
"term": {
"field_name": "exact_value"
}
}
}
2. Prefix查询
- 作用:匹配字段中以特定前缀开始的值。
- 示例:
GET /my_index/_search
{
"query": {
"prefix": {
"title": "quick" // 查找title字段以"quick"开头的所有文档
}
}
}
3. Wildcard查询
- 作用:匹配字段中符合通配符模式的值。
- 示例:
GET /my_index/_search
{
"query": {
"wildcard": {
"title": {
"value": "qu?ck*brown*fox"
}
}
}
}
4. Fuzzy查询
- 作用:模糊匹配,允许一定程度的拼写错误或字符替换。
- 示例:
GET /my_index/_search
{
"query": {
"fuzzy": {
"title": {
"value": "elasticsearcch",
"fuzziness": "AUTO" // 默认最大编辑距离,也可以设定为2、"1~2"等
}
}
}
}
5. Boost(提升权重)
- 作用:在查询中增加特定字段或查询子句的权重,影响相关性评分。
- 示例:
GET /my_index/_search
{
"query": {
"bool": {
"should": [
{"match": {"title": "Elasticsearch"}},
{"match": {"description": "Full-text search engine"}},
{
"match": {
"tag": "elasticsearch",
"boost": 2 // 提升tag字段匹配的权重
}
}
]
}
}
}
注意事项:
- 上述查询在实际使用中可能需要结合具体字段的映射(mapping)来确定是否合适,例如,对于
term
查询,目标字段通常应该是keyword
类型而非text
类型,以避免分析器的影响。 fuzziness
参数可以根据实际情况设置,较大的值允许更多的匹配可能性,但也可能导致性能下降。boost
值越大,相关性评分对这个字段或查询的重视程度越高,在结果排序时具有更高的优先级。