2016-05-18 7 views
-1

正確な一致よりも正確でない一致を選択しているビジネス名に関するクエリがあります。ElasticSearchでの正確な一致結果の比較

curl -XPOST "$ELASTICSEARCH_ENDPOINT/$ELASTICSEARCH_INDEX/company/_search" -d ' 
    { 
     "query": { 
     "match": { 
      "company_name": "ACME WIDGETS LLC" 
     } 
     } 
    } 
    ' 

結果::

  • "ACMEウィジェットBUSINESS LLC"(スコア:7.8596606)
  • "ACMEウィジェットLLC"(以下(擬似)クエリの例

    、スコア:7.7698755)(最高の結果になるはずです)

フレーズマッチングを試みましたが、これは厳しい。 constant_scoreラッパーを見ましたが、これは必要なスコアリングを削除します。

この場合、マッピングがクエリに影響するとは思えませんが、必要に応じて提供することができます。

私たちが望むふるまいを得るための提案はありますか?異なるクエリタイプを検討する必要がありますか?

説明機能を使用すると、文書が同じ方法で分析されることが示されます。私は信じている若干異なるスコアは、彼らが異なる破片にあるために発生します。私が理解していないことは、検索に無関係な単語を含む文書にどのようにペナルティを課すかということです。あなたはおそらくこれを試すことができ、その場合には

curl -XPOST "$ELASTICSEARCH_ENDPOINT/$ELASTICSEARCH_INDEX/company/_search" -d ' 
{ 
    "query": { 
     "match_phrase": { 
      "company_name": { 
      "query": "ACME WIDGETS LLC", 
      "slop": 5 
     } 
    } 
    } 
} 
' 
+0

であなたの成果を知ってみましょう、あなたは何を得るのですか? – Val

+0

複数の 'should'文を使う' bool'クエリを提案します。これらのステートメントの1つは完全一致です。正確な意味は、必要なものによって異なります。最も単純なアプローチは、 'company_name'フィールドの' .raw'サブフィールドを定義し、それを 'not_analyzed'にするか、' keyword'で分析することです。 'should'文の一つが' company_name.raw'の 'term'クエリになります。一致する場合は総合スコアに値を加算し、そうでなければ文書のスコアは 'match'ステートメントのスコアのみになります。 –

+0

このアプローチに興味がある場合は、サンプルクエリとマッピングを提供できます。 –

答えて

0

は、以下のように汚物をmatch_phrase試してみてください。 これは完全一致に高いスコアを与えますが、ほとんど偏差のないクエリにも一致します。

私が代わりに `` match`のmatch_phrase`を使用しようとするこの

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match_phrase": { 
      "company_name": { 
       "query": "ACME WIDGETS LLC", 
       "slop": 5, 
       "boost": 5 
      } 
      } 
     }, 
     { 
      "match": { 
      "company_name": { 
       "query": "ACME WIDGETS LLC", 
       "boost": 1 
      } 
      } 
     } 
     ] 
    } 
    } 
} 
+0

ありがとうございます。この問題は、正確なフレーズから少しずれても結果が返されないことになります。たとえば、「ACME WIDGET LLC」を照会すると、一致しません。 – somewhatoff

0

関連する問題