becomes an object of fascination, of indefinable longing. From that character springs a novel, a gesture of the imagination that both embodies and articulates Milan Kundera's supreme mastery of the novel and its purpose: to explore thoroughly the great themes of existence."""
}
搜索的方式主要有两种,URL搜索和请求体搜索,一个是将搜索的条件写在URL中,一个是将请求写在请求体中。
URL参数条件搜索
语法:GET /index/type/_search?参数
参数解析:
- q:使用某个字段来进行查询,例如q:book_name=book,就是根据book_name中是否有book来进行搜索。
- sort:使用某个字段来进行排序,例如sort=cost:desc,就是根据cost字段来进行降序desc排序。
- 其他:fileds,timeout,analyzer【这些参数留在请求体搜索中讲】
- 不带参数时,为“全搜索”
- 多个参数使用&&拼接
示例:
GET /douban/book/_search?q=book_summary:character
GET /douban/book/_search?q=book_author:Milan
GET /douban/book/_search?q=book_summary:a
GET /douban/book/_search?q=book_summary:a&&sort=book_pages:desc
GET /douban/book/_search?q=book_summary:a&&q=book_author:Milan
【值得注意的是,请先不要对text类型的数据进行排序,这会影响搜索,对整数排序即可,后面会再细讲】
查询结果解析:
【考虑到数据太长的问题,所以我给了另一个搜索结果的返回截图】
补充:把搜索条件写在url中的搜索方式比较少用,因为查询参数拼接到URL中会比较麻烦。
请求体条件搜索
语法与示例:
//全搜索
GET /index/type/_search
GET /douban/book/_search
//全搜索
GET /index/type/_search
{
"query": {
"match_all": {}
}
}
GET /douban/book/_search
{
"query": {
"match_all": {}
}
}
// 查询指定字段的数据(全文搜索,如果搜索值有多个词,仅匹配一个词的结果也可以查询出来):
GET /index/type/_search
{
"query": {
"match": {
"字段名": "搜索值"
}
}
}
GET /douban/book/_search
{
"query": {
"match": {
"book_name": "A The"
}
}
}
// 使用同一搜索值搜索多个字段:
GET /index/type/_search
{
"query": {
"multi_match": {
"query": "搜索值",
"fields": [
"搜索的字段1","搜索的字段2"]
}
}
}
GET /douban/book/_search
{
"query": {
"multi_match": {
"query": "A",
"fields": [
"book_name","book_summary"]
}
}
}
// 短语查询:【搜索值必须完全匹配,不会把搜索值拆分来搜索】
GET /index/type/_search
{
"query": {
"match_phrase": {
"字段": "搜索值"
}
}
}
GET /douban/book/_search
{
"query": {
"match_phrase": {
"book_summary": "a character"
}
}
}
// 字段过滤,查询的结果只显示指定字段
GET /product/book/_search
{
"query": {
"查询条件"
},
"_source": [
"显示的字段1",
"显示的字段2"
]
}
GET /douban/book/_search
{
"query": {
"match": {
"book_name": "Story"
}
},
"_source": [
"book_name",
"book_id"
]
}
// 高亮查询:【根据查询的关键字来进行高亮,高亮的结果会显示在返回结果的会自动在返回结果中的highlight中,关键字会被加上<em>标签】
// 如果想要多字段高亮,也需要进行多字段搜索
GET /index/book/_search
{
"query": {
"查询条件"
},
"highlight": {
"fields": {
"高亮的字段名1": {}
}
}
}
GET /douban/book/_search
{
"query": {
"match": {
"book_summary": "Story"
}
},
"highlight": {
"fields": {
"book_summary":{}
}
}
}
GET /douban/book/_search
{
"query": {
"multi_match": {
"query": "Story",
"fields": [
"book_name&quo