【问题标题】:ngram elasticsearchngram弹性搜索
【发布时间】:2016-10-14 17:04:44
【问题描述】:
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

谁能帮我解决这个问题?

【问题讨论】:

    标签: elasticsearch elasticsearch-plugin analyzer n-gram


    【解决方案1】:

    干得好,你快到了。首先,您需要一个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"
              ]
            }
          }
        }
      }
    }
    

    '

    【讨论】:

    • Val - 我正在尝试编写一个分析器,将标记拆分为带有空格的特殊字符,然后转换为大写。如果我用小写搜索它也应该工作 - stackoverflow.com/questions/39643533/… - 如果可能的话你能帮忙..
    • 我无法接受这个答案.. 它是说你应该只在 7 分钟后接受.. 我一定会这样做!
    • 如果您也可以帮助我解决模式替换解决方案,那就太好了。如果还有其他方法可以做到这一点,请告诉我。这将是伟大的瓦尔!非常感谢!
    • 别着急,我去看看!
    猜你喜欢
    • 2017-12-23
    • 2022-08-17
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2021-01-18
    • 2021-11-23
    相关资源
    最近更新 更多