2016-12-06 7 views
1

私のエラスティックサーバにテキストのインデックスがあります。 は、私はこのようなnグラムのトークナイザを実装している:検索パターンの最小文字数以上でngramを使用してテキスト内を検索する

"analysis": { 
     "analyzer": { 
     "ngram_analyzer": { 
      "type": "custom", 
      "tokenizer": "ngram_tokenizer" 
     } 
     }, 
     "tokenizer": { 
     "ngram_tokenizer": { 
      "type": "ngram", 
      "min_gram": "3", 
      "max_gram": "7" 
     } 
     } 
    }, 

は、私は、クエリマッチ「地獄」 を配置すると

「こんにちは、美しい世界エル」

私がそれをしたい私のデータがあるとしましょう私の最初の単語(こんにちは)とellという単語も見つからないので、私は自分の検索パターンを「ブレイク」して、ちょうどそれを自分のデータで見つけ出すのをやめたい(0123ありがとうございます

+0

こんにちは "Hel、ell、llo、Hell、ello、Hello"とトークン化されます - > "ell"とellで検索しても、結果は1つだけです。 - > "こんにちは美しい世界のell"。 あなたは文章のリストがあり、1つは「こんにちは美しい世界」で、もう1つは「美しい世界のell」であり、「ell」を検索すると、トークナイザが索引付けした方法であるため、 – mirzak

+0

私はあなたに同意しますが、私は地獄を探していました。地獄という言葉を手に入れたいと思います。私はそれを探していませんでした。文字は少なく、Hもありません。 –

+0

私は理解できません。検索者が私の言葉をHel、ell、hellに壊しているだけでなく、Hellフレーズを検索するのではなく –

答えて

1

解決策は、アナライザのトークナイザを変更することです。あなたは

"some_analyzer": { 
    "type": "custom", 
    "tokenizer": "whitespace", 
    "filter": [ "lowercase" ] 
    } 

重要のようにそれを行うことができますたとえば

は、検索アナライザは、NGRAMトークナイザを持っていないということです。

+0

ありがとうございますが、空白文字トークナイザは、 "Hello beautiful worldell"というテキストがあり、 "地獄"を検索した場合、最初の単語でそれが見つからないような部分フレーズを検索することを許可しません、いいえ? –

+0

私はちょうどこれのように試してみました。私は "こんにちは美しい世界のell"を索引付けし、 "地獄"を探しました - >それは "こんにちは"で1ヒットしました。これは、nGram tokenizer(3 - 30)を使用しているためです。 Helloは "Hel、ell、llo、Hell、ello、Hello"、 "ell"のようにトークン化されます。検索アナライザトークナイザは、空白で検索文字列を分割することを意味する「空白」です。私の場合、それはちょうど "地獄"以来、分割されません。私は「地獄」が用語の1つとして索引付けされているので、それを見つけることができました。詳細:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-termvectors.html – mirzak

+0

本当にありがとう、私がやったことは、この問題を解決しました!ありがとうございました。 今、新しい問題があります。ハイライトを使用しています。事実、私は地獄を探していますので、何らかの理由で夜通しになることはありません。 –