首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法配置弹性搜索

无法配置弹性搜索
EN

Stack Overflow用户
提问于 2022-06-21 07:38:18
回答 1查看 81关注 0票数 0

我在搜索中输入了“预订”这个词,并且已经从它返回“烹饪”的第五个结果开始,但是还有“预订”这个词的结果,它们包含在行中。

代码语言:javascript
复制
$this->aQuery['query']['bool']['must'][]['multi_match'] = [
   'type' => 'cross_fields',
   'query' => 'Booking',
   'fields' => ['prod_name', 'prod_prefix'],
   'operator' => 'or'
];

我需要只包含“预订”这个词的结果。但如果您输入“旅行预订”,则结果可能包含“旅行”和“预订”。

EN

回答 1

Stack Overflow用户

发布于 2022-06-23 04:59:36

若要获得完全匹配,请使用术语查询

Match使用所谓的分析器来转换您的搜索并找到所有匹配的单词。搜索字符串上的术语检查是否完全匹配,因此搜索预订不应该返回包含“旅行预订”的文档。

如本页所述:

默认情况下,弹性搜索会在分析期间更改文本字段的值。例如,默认标准分析器将文本字段值更改如下:

  • 移除大部分标点符号
  • 将剩余的内容划分为单独的单词,称为令牌。
  • 小写代币

术语查询不分析搜索项。术语查询只搜索所提供的确切术语。这意味着查询一词在搜索文本字段时可能返回差的或没有结果。

还请注意,您需要在索引映射中包含关键字类型。

代码语言:javascript
复制
"prod_name": {
    "type":  "text",
    "fields": {
      "raw": { 
        "type":  "keyword"
      }
    }
  }

然后,在搜索单词时,需要使用关键字字段名:

代码语言:javascript
复制
"term": {
  "prod_name.raw": {
    "value": "Booking",
    "boost": 1.0
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72696925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档