如何在Elasticsearch中执行“以此开始”搜索

zwghvu4y  于 2022-11-28  发布在  ElasticSearch
关注(0)|答案(1)|浏览(197)

我正在尝试使用elasticsearch实现一个文本搜索应用程序,它执行“以a a a开始”搜索(如match_phrase_prefix),但我还需要在我的分析器上应用一些过滤器,如“stemmer”和“stop”。
下面是我要搜索的示例文档:
1.棕色狐狸跑得很快。
1.看!棕色的狐狸跑得很快。
1.棕色的狐狸比黄色的狐狸跑得快。
而我的目标是,当我搜索“棕色狐狸”时,应用程序应该返回我1)和3)
我尝试了关键字作为我的tokeniser与过滤器的“stemmer”和“stop”,它只工作的最后一个字,我的文件,例如:“棕色的狐狸跑得很快”将变成“棕色的狐狸跑得很快”,但我需要把整个句子符号化。

tquggr8v

tquggr8v1#

您需要应用标记化,这样您将对句子中的每个单词应用词干分析。
settings.analysis.analyzer中,您可以添加以下自定义英语分析器:

{
  "custom_english": {
    "filter": [
      "stopwords",
      "english_possessive_stemmer",
      "lowercase",
      "english_stemmer"
    ],
    "tokenizer": "standard"
  }
}

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

{
  "my_field": {
    "type": "keyword",
    "ignore_above": 8191,
    "fields": {
      "en": {
        "analyzer": "custom_english",
        "type": "text"
      }
    }
  }
}

然后您可以这样查询:

{
  "query": {
    "prefix": {
      "my_field.en": {
        "value": "brown fox"
      }
    }
  }
}

这将匹配1、3。前缀查询确保您只从值的开头进行匹配。但当您使用brown foxes进行查询时,您也将得到1。这就是词干的强大之处。

相关问题