2017-06-01 10 views
0

ありがとう@Random、私は以下のようにマッピングを変更しました。テストのために私は索引付けのための私のタイプとして "映画"を使用しました。 注:search_analyzerも追加しました。私はそれがなければ適切な結果を得ていませんでした。 しかし、私はsearch_analyzerの使用に次の疑問があります。ElasticSearch:インデックス作成中にnグラムと言語アナライザの両方を適用できますか

1]言語アナライザの場合、カスタムsearch_analyzerを使用できますか?
2]私はn-gramアナライザのためにすべての結果を得ていますが、これは英語のアナライザに起因するものではありません。

{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "english_ngram": { 
        "type": "custom", 
        "filter": [ 
         "english_possessive_stemmer", 
         "lowercase", 
         "english_stop", 
         "english_stemmer", 
         "ngram_filter" 
        ], 
        "tokenizer": "whitespace" 
       }, 
       "search_analyzer":{ 
        "type": "custom", 
        "tokenizer": "whitespace", 
        "filter": "lowercase" 
       } 
      }, 
      "filter": { 
       "english_stop": { 
        "type": "stop" 
       }, 
       "english_stemmer": { 
        "type": "stemmer", 
        "language": "english" 
       }, 
       "english_possessive_stemmer": { 
        "type": "stemmer", 
        "language": "possessive_english" 
       }, 
       "ngram_filter": { 
        "type": "ngram", 
        "min_gram": 1, 
        "max_gram": 25 
       } 
      } 
     } 
    }, 
     "mappings": { 
    "movie": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
      "en": { 
       "type":  "string", 
       "analyzer": "english_ngram", 
       "search_analyzer": "search_analyzer" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

更新:検索・アナライザを使用して

もconsistently.andに動作していないが、私の所見とthis.Updating質問でより多くの助けを必要としています。

私は以下のマッピングを示唆しています(注:このマッピングは検索アナライザを使用しません)。

{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "english_ngram": { 
        "type": "custom", 
        "filter": [ 
         "english_possessive_stemmer", 
         "lowercase", 
         "english_stop", 
         "english_stemmer", 
         "ngram_filter" 
        ], 
        "tokenizer": "standard" 
       } 
      }, 
      "filter": { 
       "english_stop": { 
        "type": "stop" 
       }, 
       "english_stemmer": { 
        "type": "stemmer", 
        "language": "english" 
       }, 
       "english_possessive_stemmer": { 
        "type": "stemmer", 
        "language": "possessive_english" 
       }, 
       "ngram_filter": { 
        "type": "edge_ngram", 
        "min_gram": 1, 
        "max_gram": 25 
       } 
      } 
     } 
    } 
} 

作成したインデックス:

PUT http://localhost:9200/movies/movie/1

{"title":"[email protected] movie"} 

クエリ以下しようとしました:

GET http://localhost:9200/movies/movie/_search 

    { 
     "query": { 
      "multi_match": { 
       "query": "$peci mov", 
       "fields": ["title"], 
       "operator": "and" 
      } 
      } 
     } 
    } 

が、私はこのための結果を得ていない、私は何も悪いことをやっていますか? 私はのために結果を取得しようとしています:

1] Special characters 
2] Partial matches 
3] Space separated partial and full words 

おかげで再び!

答えて

0

言語アナライザに基づいてカスタムアナライザを作成できます。唯一の違いは、ngram_filterトークンフィルタをチェーンの最後に追加することです。この場合は、最初に、最後にエッジngram(フィルタ)に変換された、言語に基づいたトークン(デフォルトチェーン)を取得します。言語解析プログラムの実装は、ここではhttps://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#english-analyzerを無効にするために見つけることができます。

{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "english_ngram": { 
        "type": "custom", 
        "filter": [ 
         "english_possessive_stemmer", 
         "lowercase", 
         "english_stop", 
         "english_stemmer", 
         "ngram_filter" 
        ], 
        "tokenizer": "standard" 
       } 
      }, 
      "filter": { 
       "english_stop": { 
        "type": "stop" 
       }, 
       "english_stemmer": { 
        "type": "stemmer", 
        "language": "english" 
       }, 
       "english_possessive_stemmer": { 
        "type": "stemmer", 
        "language": "possessive_english" 
       }, 
       "ngram_filter": { 
        "type": "edge_ngram", 
        "min_gram": 1, 
        "max_gram": 25 
       } 
      } 
     } 
    } 
} 

UPDATE

あなたの代わりにstandardwhitespaceトークナイザを使用しようとすることができ、特殊文字をサポートする:ここでは英語のため、この変更の例があります。これらの文字は、あなたのトークンの一部となります。この場合:

{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
       "english_ngram": { 
        "type": "custom", 
        "filter": [ 
         "english_possessive_stemmer", 
         "lowercase", 
         "english_stop", 
         "english_stemmer", 
         "ngram_filter" 
        ], 
        "tokenizer": "whitespace" 
       } 
      }, 
      "filter": { 
       "english_stop": { 
        "type": "stop" 
       }, 
       "english_stemmer": { 
        "type": "stemmer", 
        "language": "english" 
       }, 
       "english_possessive_stemmer": { 
        "type": "stemmer", 
        "language": "possessive_english" 
       }, 
       "ngram_filter": { 
        "type": "edge_ngram", 
        "min_gram": 1, 
        "max_gram": 25 
       } 
      } 
     } 
    } 
} 
+0

どうもありがとうランダム、あなたの答えは本当に役立ちます、しかし私は、このためのいくつかの疑問を持って、私は再び私の質問を改訂している、あなたは助けてくださいできますか? – SSG

+0

'search_analyzer'が元のものよりも優れた動作をする例を教えてください。ところで、元の回答をそのまま残しておき、修正が加えられた「更新」セクションを追加するか、別の質問をしてもよいでしょう。そうでなければ混乱を招くからです。 – Random

+0

こんにちは!遅い応答の申し訳ありませんが、search_analyzerを使用しているように見えますも一貫して動作していません、私は更新セクションで私の質問を更新しました。 – SSG

関連する問題