elasticsearch - 用于全文搜索的弹性查询
问题描述
使用弹性 POST 请求创建索引(会有多条记录)
POST /rewards/deals/_bulk
{ "index": {}}
{
"deal_id":25,
"title": "Deal 1 Title",
"deal_subtitle":"Deal 1 subtitle - Amazing deal 20% off",
"header_title":"Never before deal",
"header_subtitle":"This is available as an amazing deal you can use.",
"categories":[
{"categoryId":32, "categoryName":"Treats!"},
{"categoryId":31, "categoryName":"Travel & Transportation"}],
"stores_list": [{"storeId":524, "storeName":"Awesome store", "geoX":"", "geoY":"", "postalCode":"417392"}],
"merchant_name": "Merchant Name",
"id": 1,
"merchant_id": 137,
"startEnd":"2018-11-16 00:00:00",
"endDate":"2018-11-30 00:00:00"
}
编写查询以执行全文搜索
GET /rewards/deals/_search
{
"query": {
"multi_match": {
"query": "treat",
"fields": ["title^10", "deal_subtitle^10", "header_subtitle^5", "header_title^5", "categories.categoryName^3", "stores_list.storeName^3", "stores_list.postalCode^3", "merchant_name^10"]
}
}
}
但是我没有得到任何数据来响应“治疗”,也可以在 category.categoryName 中找到治疗(源于治疗)。有人可以帮忙吗。当我搜索“零食”时,我得到了回应。我怎样才能得到以搜索关键字开头的单词的响应。
解决方案
只需向现有查询添加“类型”即可使其工作
GET /rewards/deals/_search
{
"query": {
"multi_match": {
"query": "treat",
"type":"phrase_prefix",
"fields": ["title^10", "deal_subtitle^10", "header_subtitle^5", "header_title^5", "categories.categoryName^3", "stores_list.storeName^3", "stores_list.postalCode^3", "merchant_name^10"]
}
}
}
推荐阅读
- jenkins - 在詹金斯开始另一项工作时如何获取内部错误消息
- c# - 最近邻分类算法的 NumPy 实现以完全相同的方式对所有内容进行分类
- javascript - 上传多个文件时处理 multer.single('file') 错误
- java - 如何遍历 HashMap
> 并返回哪个 Set 是最大的? - google-cloud-platform - 如何使用 GCP 部署管理器填充下拉列表
- javascript - 获取区域内的所有坐标
- google-cloud-platform - 如何在 Google Cloud Platform 上渲染 AE 项目
- windows - 如何通过 Azure Pipelines 安装 .Net Core Hosting Bundle?
- spring-boot - Spring Boot aws 集群实例调度器
- python - 如何使用 Flask 根据用户输入重新排序帖子列表(即新查询)