elasticsearch - 弹性搜索子字符串匹配
问题描述
我有包含如下索引的弹性搜索节点:
"_index" : "barivara",
"_type" : "_doc",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"area" : "Mirpur",
"address" : "house:5; MIrpur",
"description" : "home",
"price" : 400,
"number of members" : 5,
"building amenities" : "5",
"number of bed" : 7,
"number of bath" : 2,
"rentaltype" : "flat",
"fttext" : "Mirpur 7 bedroom 2 bathroom flat 10 members"
}
}
我添加了全文搜索的文本字段,但是当我搜索“3卧室Mirpur”时
包含 7 间卧室的索引也出现了。
这是我的查询/
GET /barivara/_search
{
"query": {
"bool": {
"must": {
"match": {
"fttext": {
"query": "bedroom:3 Mirpur",
"minimum_should_match": "100%"
}
}
}
}
}
}
有人能帮我吗?我是弹性搜索的菜鸟。
解决方案
您需要提供有关您配置的分析器类型的更多信息,以及文档的架构是什么,假设它们是标准的,这是我的看法。
- 根据分析器将查询转换为令牌
- 然后根据内部倒排索引,找出与它们匹配的所有文档
- 然后根据相关性得分,对它们进行排序并返回结果。
因此,在您的情况下,输入“bedroom:3 Mirpur”被分解为 3 个单词“bedroom”、“3”和“Mirpur”,并搜索索引中字段“fttext”中的所有文档,并返回结果.
因此,在您的情况下,“7 卧室”文档也将显示为3 个术语中的 2 个与这些文档匹配,但此类文档将放置在“3 卧室”文档下方
注意:假设 fttext在您的架构中是“文本”类型而不是“关键字”类型。索引期间未分析的关键字并存储为“整个单词”。所以“包含”对它们不起作用,精确搜索可以。
推荐阅读
- javascript - 无法将 jQuery 按钮提交更改为下拉选择并提交
- python - 使用 Python Dict 中的值获取键名称
- javascript - 石头、纸、剪刀游戏 - 重复 5 轮
- c# - 找不到路径的一部分,但它存在
- python - OverFlowError:Python int 太大,无法在 Windows 上转换为 C long 以限制 CSV 字段大小
- dialogflow-es - 如何处理 DialogFlow 中的后备循环?
- reactjs - 如何在 dicts reactjs 列表中包含模式和相关的错误消息?
- sharepoint - 无法从 Azure AD 导入的用户获取用户属性
- c# - 在 Unity VoiceReq 中,如果 PhraseRecognizer 无法识别任何内容,我如何收到错误消息?
- python-3.x - 多个 if 语句的 Pandas 语法使用 | 和 & 运算符