2017-06-13 1 views
0

予期しない結果を返す、私は次のマッピングを使用:へ] 1]部分検索と特殊文字の検索 2:私は次のシナリオの下で検索することができるはずですように私は、次のようにNGRAMアナライザを使用するために英語アナライザを変更した をElasticsearchが

PUT http://localhost:9200/movies/movie/1 
    { 
     "title" : "[email protected] movie" 
    } 

クエリを次のように:

を次のように
{ 
    "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 
       } 
      } 
     } 
    }, 
    "mappings": { 
    "movie": { 
     "properties": { 
     "title": { 
      "type": "string", 
      "fields": { 
      "en": { 
       "type":  "string", 
       "analyzer": "english_ngram" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

言語アナライザの利点は、自分のデータをインデックスを取得します私は「$ PECI#44 m11ov」という文字列を探しています、クエリで210
{ 
    "query": { 
     "multi_match": { 
      "query": "$peci#44 m11ov", 
      "fields": ["title.en"], 
      "operator":"and", 
      "type":  "most_fields", 
      "minimum_should_match": "75%" 
     } 
    } 
} 

、理想的に私はこのために結果を得るべきではありません。ここで間違っ 何か?

答えて

0

これはngramトークン化の結果です。あなたは、文字列をトークン化すると[email protected] movieあなたアナライザはあなたのクエリはまた、これらのトークンのほとんどを生産するなど$$p$pe、のようなトークンを生成します。これらの一致は、完全一致よりも低いスコアを持つことになりますけれども。あなたはこれらの偽陽性の一致を除外することが重要だ場合は、min_scoreオプションhttps://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-min-score.html

+0

おかげランダムを使用してしきい値を設定してみてください! – SSG