ngram弹性搜索

ngram elasticsearch

curl -XPUT 'http://localhost:9200/testsoundi' -d '{  "settings": {
  "analysis": {
  "analyzer": {
  "my_edge_ngram_analyzer": {
  "tokenizer": "my_edge_ngram_tokenizer"
  }
  },
  "tokenizer": {
  "my_edge_ngram_tokenizer": {
  "type": "edgeNGram", "min_gram" : "2", "max_gram" : "5",
  "token_chars": ["letter", "digit","whitespace"]
  }
  }
  }
  }
  }'


soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl 'localhost:9200/testsoundi/_analyze?pretty=1&analyzer=my_edge_ngram_analyzer' -d 'wonder'

但我得到的输出是 wo、won、wond 等。如果我将 max_gram 设为 3,我只会得到第三个字母 ('wo'、'won')

I am expecting output like:

won 
ond
nde
der

谁能帮我解决这个问题?

干得好,你快完成了。首先,您需要一个 nGram 分词器,而不是 edgeNGram。不同之处在于后者只会从单词的开头开始标记,而前者会创建所需长度的所有可能标记,而不管单词中的位置如何。

其次,如果您需要长度为 3 的标记,min_grammax_gram 需要为 3。

curl -XPUT 'http://localhost:9200/testsoundi' -d '{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_ngram_analyzer": {
          "tokenizer": "my_ngram_tokenizer"
        }
      },
      "tokenizer": {
        "my_ngram_tokenizer": {
          "type": "nGram",
          "min_gram": "3",
          "max_gram": "3",
          "token_chars": [
            "letter",
            "digit",
            "whitespace"
          ]
        }
      }
    }
  }
}

'