Elasticsearch常用搜索
Elasticsearch搜索相关
URIsearch
GET twitter/_search?q=city:("北京" or "上海") &sort=DOB:desc&_source=city,age,DOB&size=2
twitter:指定索引
q:查询sql, 字段:值,如果没有字段,就是查询所有字段
sort:排序方式, 字段:desc/asc
_source:返回_source中显示的字段,用逗号隔开
size:分页大小
Lucene中几种常用的Query
PhraseQuery
GET twitter/_search?q=city:"Shan tou" //shan tou有引号
等效于 Shan and tou,city字段同时有Shan, tou,并且顺序一致
TermQuery
GET twitter/_search?q=city:Shan tou
等效于Shan or tou, city字段出现Shan或者tou
Request Body Search
全文本查询
query的类别,match,match_phrase,query_string,simple_query_string
POST twitter/_search
{
"_source": ["city","age","DOB"], //显示source字段
"from":0,
"size":5,
"query": {
"match": { //类似北京 or 上海
"city":"北京 上海"
}
}
}
POST twitter/_search
{
"query": {
"match_phrase": {
"title":{
"query":"happy birthday"
}
}
}
}
POST twitter/_search
{
"query": {
"query_string": {
"fields":["city","age","DOB"], //查询的字段
"query": "北京"
}
}
}
POST twitter/_search
{
"query": {
"simple_query_string": {
"query": "Ruan Yiming",
"fields": ["name"],
"default_operator": "AND"
}
}
}
term查询
Term查询,对输入不做分词。 会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分
Term Query / Range Query / Exists Query / Prefix Query /Wildcard Query
GET twitter/_search
{
"query": {
"term": {
"city.keyword": { //最好通过keyword来查询,因为如果是text,分词后存储格式会变化
"value": "北京"
}
}
}
}
GET twitter/_search
{
"query": {
"range": { //范围
"age": {
"gte": 50
}
}
}
}
可以通过 Constant Score 将查询转换成⼀个 Filtering,避免算分,并利⽤缓存,提⾼性能
GET twitter/_search
{
"query": {
"constant_score":{
"filter": {
"term": {
"city.keyword": "北京"
} }
}
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接