簡體   English   中英

如何在 Elasticsearch 中執行“開始於”搜索

[英]How can I perform a "begin with" search in Elasticsearch

我正在嘗試使用 elasticsearch 執行文本搜索應用程序,它執行“開始於”搜索(如 match_phrase_prefix),但我還需要在我的分析器上應用一些過濾器,例如“詞干分析器”和“停止”。

這是我要搜索的示例文檔:

  1. 棕色的狐狸跑得很快。
  2. 手表。 棕色的狐狸跑得很快。
  3. 棕狐比黃狐跑得快。

我的目標是,當我搜索“brown fox”時,應用程序應該返回 1) 和 3)

我嘗試使用關鍵字作為帶有“詞干分析器”和“停止”過濾器的標記器,它只對我文檔的最后一個詞有效,例如:“The brown fox runs quickly”將變為“the brown fox runs quick”,但是我需要標記整個句子。

您需要應用標記化,因此您將對句子中的每個單詞應用詞干提取。

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。這就是詞干提取的力量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM