【问题标题】:Less restrictive search doesn't return any hits in ElasticSearch限制较少的搜索不会在 ElasticSearch 中返回任何命中
【发布时间】:2019-04-17 07:54:27
【问题描述】:

下面的查询返回命中,例如name 是“银行余额”:

GET /_search

{ "query": {
    "multi_match": { "query": "Balances",
                     "fields": ["name","descrip","notes"] 
                   }
           }
 }

那么为什么这不返回任何东西呢?请注意,查询限制较少,单词是“Balance”,而不是带有 s 的“Balances”。

GET /_search

{ "query": {
    "multi_match": { "query": "Balance",
                     "fields": ["name","descrip","notes"] 
                   }
           }
 }

什么搜索会同时返回?

【问题讨论】:

标签: elasticsearch


【解决方案1】:

您需要更改映射才能做到这一点。

如果您在创建索引时没有指定与特定分析器的映射,elasticsearch 将使用默认映射和分析器。

默认映射会将每个文本字段同时映射为textkeyword,因此您将能够执行全文搜索(匹配部分字符串)和关键字搜索(匹配整个字符串),但它将使用standardanalyzer

使用standard 分析器,您的示例Balances by bank 变为以下令牌列表:[Balancesby bank],这些项目被添加到倒排索引中,当您搜索其中任何一个时,elasticsearch 可以找到文档。

当你只搜索 Balance 时,倒排索引中不存在这个词,elasticsearch 什么也不返回。

为了能够同时返回 BalanceBalances,您需要更改映射并将 analyzer 用于英语,此分析器会将您的术语减少到他们的词干和匹配 BalanceBalances 以及 BalancedBalancedBalancer 等.

看看这个part of the documentation,看看分析过程是如何工作的。

当然,您也可以搜索 Balance*,它会返回 BalanceBalances,但这是一个不同的查询.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多