一,用term查询
1,term查询不会讲关键字进行分词处理,会用关键字原文去搜索索引。
如下例子:
GET nba/_search
{
"query": {
"term": {
"displayNameEn": "Vince Carter"
}
}
}
虽然在索引库中确实有一个叫“Vince Carter”的球员,但上面的查询语句是不会得到预期结果的。
因为这个名字在创建文档时会被分词为:vince carter,即大写字母变小写,然后拆分为两个单词。
而term查询,不会对查询关键字进行分析,本例中会用"Vince Carter"去强行匹配,自然查询不到结果。
2,constant_score跳过算分
GET nba/_search
{
"query": {
"constant_score": {
"filter": {
"term": {
"displayNameEn.keyword": "Vince Carter"
}
},
"boost": 1.2
}
}
}
3,range query,exists query,prefix query,wildcard query
二,基于全文本的搜索
1,match,match phase,query string
2,全文本搜索的精准度的控制
2.1 query string查询
GET nba/_search
{
"query": {
"match": {
"displayNameEn":{
"query": "Vince Carter",
"operator": "and"
}
}
}
}
}
POST nba/_search
{
"query":{
"query_string": {
"default_field": "teamName",
"query": "老 AND 鹰"
}
}
}