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 协议》,转载必须注明作者和本文链接
用过哪些工具?为啥用这个工具(速度快,支持高并发...)?底层如何实现的?
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!