2017-11-26 3 views
0

私はESを複数のアナライザで検索する方法を探しています。 NGramアナライザーと1つまたは複数の言語アナライザー。弾性検索:複数のアナライザを同じデータで実行する

可能な解決策は、複数のフィールドを使用し、各フィールドにどのアナライザを使用するかを明示的に宣言することです。それに伴う問題は、私は明示的に検索クエリにすべてのフィールドとその解析器を記述していることである

"mappings": { 
    "my_entity": { 
     "properties": { 
     "my_field": { 
      "type": "text", 
      "fields": { 
      "ngram": { 
       "type": "string", 
       "analyzer": "ngram_analyzer" 
      }, 
      "spanish": { 
       "type": "string", 
       "analyzer": "spanish" 
      }, 
      "english": { 
       "type": "string", 
       "analyzer": "english" 
      } 
      } 
     } 
     } 
    } 
    } 

:以下のマッピングを設定するには、例えば

、。 "_all"で検索したり、複数のアナライザを使用することはできません。

"_all"クエリで複数のアナライザを使用する方法はありますか? 「_all.ngram」、「_all.spanish」のようなもので、copy_toを使用しないとデータを複製しますか?

ngram analyzerをスペイン語(または他の外国語)と組み合わせて、単一のカスタムアナライザを作成することはできますか? 私は、次の設定をテストしてきたが、これらは動作しませんでした:

PUT /ngrams_index 
    { 
     "settings": { 
      "number_of_shards": 1, 
      "analysis": { 
      "tokenizer": { 
       "ngram_tokenizer": { 
       "type": "nGram", 
       "min_gram": 3, 
       "max_gram": 3 
       } 
      }, 
      "filter": { 
       "ngram_filter": { 
        "type": "nGram", 
        "min_gram": 3, 
        "max_gram": 3 
       }, 

       "spanish_stop": { 
       "type":  "stop", 
       "stopwords": "_spanish_" 
       }, 
       "spanish_keywords": { 
       "type":  "keyword_marker", 
       "keywords": ["ejemplo"] 
       }, 
       "spanish_stemmer": { 
       "type":  "stemmer", 
       "language": "light_spanish" 
       } 


      }, 
      "analyzer": { 
       "ngram_analyzer": { 
       "type": "custom", 
       "tokenizer": "ngram_tokenizer", 
       "filter": [ 
        "lowercase", 
        "spanish_stop", 
        "spanish_keywords", 
        "spanish_stemmer" 
       ] 
       } 
      } 
      } 
     }, 
     "mappings": { 
      "my_entity": { 
      "_all": { 
        "enabled": true, 
        "analyzer": "ngram_analyzer" 
      }, 

      "properties": { 
       "my_field": { 
        "type": "text", 
        "fields": { 
          "analyzer1": { 
          "type": "string", 
          "analyzer": "ngram_analyzer" 
          }, 
          "analyzer2": { 
            "type": "string", 
           "analyzer": "spanish" 
          }, 
          "analyzer3": { 
            "type": "string", 
           "analyzer": "english" 
          } 
        } 
       } 
      } 
      } 
     } 
    } 



    GET /ngrams_index/_analyze 
    { 
     "field": "_all", 
     "text": "Hola, me llamo Juan." 
    } 

リターン:ちょうどnグラムの結果、

GET /ngrams_index/_analyze 
    { 
     "field": "my_field.analyzer2", 
     "text": "Hola, me llamo Juan." 
    } 

が適切に検索文字列を解析し、スペインの分析なし

スペイン語とngramを組み合わせたカスタムアナライザを構築することは可能ですか?

答えて

1

カスタムNGRAM +言語解析を作成する方法があります:

PUT /ngrams_index 
{ 
    "settings": { 
    "number_of_shards": 1, 
    "analysis": { 
     "filter": { 
     "ngram_filter": { 
      "type": "nGram", 
      "min_gram": 3, 
      "max_gram": 3 
     }, 
     "spanish_stop": { 
      "type": "stop", 
      "stopwords": "_spanish_" 
     }, 
     "spanish_keywords": { 
      "type": "keyword_marker", 
      "keywords": [ 
      "ejemplo" 
      ] 
     }, 
     "spanish_stemmer": { 
      "type": "stemmer", 
      "language": "light_spanish" 
     } 
     }, 
     "analyzer": { 
     "ngram_analyzer": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "spanish_stop", 
      "spanish_keywords", 
      "spanish_stemmer", 
      "ngram_filter" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "my_entity": { 
     "_all": { 
     "enabled": true, 
     "analyzer": "ngram_analyzer" 
     }, 

     "properties": { 
     "my_field": { 
      "type": "text", 
      "analyzer": "ngram_analyzer" 
     } 
     } 
    } 
    } 
} 


GET /ngrams_index/_analyze 
{ 
    "field": "my_field", 
    "text": "Hola, me llamo Juan." 
}