【发布时间】:2015-10-28 17:50:14
【问题描述】:
我为所有文档设置了索引:
{
"mappings" {
"book" {
"_source": { "enabled": true },
"properties": [
"title": { "type": "string", "analyzer": "standard", "search_analyzer": "standard" },
"description": { "type": "string", "analyzer": "standard", "search_analyzer": "standard" },
"author": { "type": "string", "analyzer": "standard", "search_analyzer": "standard" }
]
}
}
}
我将它推送到一个名为“library”的索引中。
我想要做的是执行具有以下要求的搜索。假设用户输入了“大黄铲”之类的内容
- 以三种方式执行用户输入关键字的搜索:
- 作为一个完整的短语:“简单的黄色铲子”
- 作为一组AND关键字:“简单+黄色+铲子”
- 作为一组 OR 关键字:“simple|yellow|shovel”
- 确保关键字集按优先级顺序执行(提升?):
- 全文优先
- 然后是第二个
- 或第三个
使用简单的查询对单个搜索进行查找:
{
"query": {
"simple_query_string": {
"query": "\"simple yellow shovel\""
}
}
}
如何使用 boosting 执行多重搜索? 或者我应该在索引字段上使用类似“匹配”查询的东西吗?
【问题讨论】:
-
为什么你的属性是
not_analyzed?这没有意义。始终分析您要对其运行文本搜索的字段。而且您没有优先考虑搜索字段。我认为匹配的标题应该比描述中的匹配具有更高的优先级? -
我会修复
not_analyzed部分。那是一个很大的声音。为简洁起见,我省略了优先级。
标签: elasticsearch