首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Elasticsearch中执行“开始”搜索?

如何在Elasticsearch中执行“开始”搜索?
EN

Stack Overflow用户
提问于 2022-11-14 14:29:15
回答 1查看 48关注 0票数 0

我正在尝试使用elasticsearch实现一个文本搜索应用程序,该应用程序执行“开始”搜索(如match_phrase_prefix),但我也需要在分析器上应用诸如“词干器”和“停止”之类的过滤器。

下面是我想要搜索的示例文档:

棕色狐狸quickly.

  • Watch!的
  1. 棕色狐狸跑得很快,
  2. 棕狐跑得比黄狐狸快。--

我的目标是,当我搜索“棕狐”时,应用程序应该返回给我1)和3)

我尝试了关键字作为我的标记,带有“词干器”和“停止”的过滤器,它只适用于我文档中的最后一个词,例如:“棕狐跑得快”将变成“棕狐跑得快”,但我需要把整个句子托起。

EN

回答 1

Stack Overflow用户

发布于 2022-11-14 15:14:48

您需要应用标记化,这样您就可以对句子中的每个单词进行词干词干处理。

settings.analysis.analyzer中,您可以添加这个自定义英语分析器:

代码语言:javascript
复制
{
  "custom_english": {
    "filter": [
      "stopwords",
      "english_possessive_stemmer",
      "lowercase",
      "english_stemmer"
    ],
    "tokenizer": "standard"
  }
}

然后,您可以在您的字段定义中添加一个子字段,如下所示的mappings中这样:

代码语言:javascript
复制
{
  "my_field": {
    "type": "keyword",
    "ignore_above": 8191,
    "fields": {
      "en": {
        "analyzer": "custom_english",
        "type": "text"
      }
    }
  }
}

然后您可以这样查询:

代码语言:javascript
复制
{
  "query": {
    "prefix": {
      "my_field.en": {
        "value": "brown fox"
      }
    }
  }
}

这将匹配1,3。前缀查询确保只匹配从值的开头。但是当您使用brown foxes查询时,您也会得到1,这就是词干的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74433239

复制
相关文章

相似问题

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