如何利用ES DSL实现全文搜索
利用ES API搜索数据的方式
目前有两种方式:
- 通过 REST 请求 URI ,发送搜索参数。
- 通过REST 请求体,发送搜索参数。而请求体允许你包含更容易表达和可阅读的JSON格式。本文主要利用REST请求体实现全文搜索。
关于利用ES的restful api实现搜索的方法可以参考这篇文章,写的很不错,对于初学者有较大的参考价值。
因为ES的restful api,多数是对指定key进行检索,无法根据value检索,在本菜鸡查找了一会之后用,发现可以利用multi_match方法对json进行有效。
multi_match 用法:
查询 product_name 和 product_desc 字段中,只要有:toothbrush 关键字的就查询出来。
GET /product_index/product/_search
{
"query": {
"multi_match": {
"query": "search something", // 此处输入你要查询的内容,不需要借助key
"fields": [ // 此处列出需要查询的字段范围
"field1",
"field2"
]
}
}
}
multi_match 跨多个 field 查询,表示查询分词必须出现在相同字段中。
GET /product_index/product/_search
{
"query": {
"multi_match": {
"query": "search something",
"type": "cross_fields", // 为了实现叠加搜索,需要借助multi_march跨域搜索的功能,表示查询的条目必须包含相同的字段。所以此处加入这两句
"operator": "and",
"fields": [
"field1",
"field2"
]
}
}
}
参考文献
https://blog.csdn.net/jiaminbao/article/details/80105636
https://blog.csdn.net/stark_summer/article/details/48830493
https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-search-template.html