【发布时间】:2025-11-26 06:20:02
【问题描述】:
我有一个记录数据库,每个记录都有一个right 和一个left 字段,并且这两个字段都包含文本。该数据库使用 Elasticsearch 进行索引。
我想搜索这些记录的两个字段,并找到在任何字段中包含两个或多个具有某些前缀的单词的记录。搜索应该足够具体,以便仅查找包含查询中所有字词的记录,而不仅仅是其中的一部分。
例如,查询 qui bro 应该返回包含句子 The quick brown fox jumped over the lazy dog 的记录,而不是包含句子 的记录>快狐跳过懒狗
我看到了关于如何perform prefix queries with Elasticsearch 的描述(并且在一个字段中搜索一个单词时可以重现它)。
我还看到了有关如何使用 perform multi-match queries 一次搜索多个字段的说明。
但我需要的是这些技术的某种组合,这样我既可以一次搜索多个字段,又可以只查找单词的一部分。并且只获取那些包含其部分包含在查询中的所有单词的记录。
我该怎么做?任何方法都可以(前缀、ngram 等)。
(PS:我的问题在一定程度上可能与this one 重复,但由于从未得到回答,我希望我的提问不会违反任何规则。)
========================================
更新:
哦,我可能有问题的第一部分。这是我的 Rails 应用程序中似乎可以使用的语法(使用 elasticsearch-rails gem):
response = Paragraph.search query: {bool: { must: [ { prefix: {right: "qui"}}, {prefix: {right: "bro"}} ] } }
或者,用纯 Elasticsearch 语法重写它:
{
"bool": {
"must": [
{ "prefix": { "right": "qui" }},
{ "prefix": { "right": "bro" }}
]
}
}
所以我现在更新的问题是如何将此前缀搜索与 multi_match 搜索结合起来(通过 right 和 left 字段进行搜索。
【问题讨论】:
标签: elasticsearch