2017-01-27 20 views
1

PageDocumentを除いて、タイトルに基づいて検索したいものがいくつかあります。このフィールドは分析されます。私はスペルミスのユーザーを助けるために曖昧さをほしいと思う。私はsomesome textthis is some textと一致するので、部分一致を行うことができる必要があります。私は次のクエリを使用している場合弾性検索結果が正確に一致してから最初に一致する

私は

{ 
    "size": 20, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "title": { 
       "query": "myterm", 
       "fuzziness": 1 
      } 
      } 
     } 
     ], 
     "must_not": [ 
     { 
      "wildcard": { 
      "path": { 
       "value": "/test/*" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

だから、私はtitle.not_analyzedとしようとした時にタイトルフィールドのnot_analyzedバージョンを追加しましたので、TF-IDFの最初の結果としてバック完全一致を得ることはありませんtermを使用して完全一致の重み付けを増やすために関数スコアを追加する。

{ 
    "query": { 
    "function_score": { 
     "functions": [ 
     { 
      "weight": 2, 
      "filter": { 
      "fquery": { 
       "query": { 
       "term": { 
        "title.not_analyzed": { 
        "value": "myterm" 
        } 
       } 
       } 
      } 
      } 
     } 
     ], 
     "query": { 
     "bool": { 
      "must": [ 
      { 
       "match": { 
       "title": { 
        "query": "myterm", 
        "fuzziness": 1 
       } 
       } 
      } 
      ], 
      "must_not": [ 
      { 
       "wildcard": { 
       "path": { 
        "value": "/path/*" 
       } 
       } 
      } 
      ] 
     } 
     }, 
     "boost_mode": "multiply" 
    } 
    } 
} 

しかし、これは私にも同じ結果をもたらします。最初に返された正確な一致を取得するにはどうすればよいですか?

答えて

0

shouldboostの組み合わせを追加することで、これに対する解決策が見つかりました。

{ 
    "size": 20, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "title": { 
       "query": "myterm", 
       "fuzziness": 1 
      } 
      } 
     } 
     ], 
     "must_not": [ 
     { 
      "wildcard": { 
      "path": { 
       "value": "/path/*" 
      } 
      } 
     } 
     ], 
     "should": [ 
     { 
      "term": { 
      "title": { 
       "value": "myterm", 
       "boost": 10 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
関連する問題