2016-05-16 10 views
0

カテゴリインデックスを作成しましたが、これは完了を示唆しています。弾性検索は正確な文字列では一致しません

curl -XPUT http://localhost:9200/categories/category/_mapping -d '{ 
    "category" : { 
     "properties" : { 
      "categoryDescription" : { 
       "type" : "string" 
      }, 
      "suggest" : { 
       "type" : "completion", 
       "analyzer" : "simple", 
       "search_analyzer" : "simple", 
       "payloads" : true 
      } 
     } 
    } 
}' 

私は「メキシコの食料品店」のためのインデックス付けのカテゴリを持っていると私は私がゼロのヒットを取得しています、その文字列を検索したときにのみ、結果勧め:私はゼロのヒットを取得しています

{ 
    "query":{ 
     "fuzzy":{ 
      "categoryDescription":{ 
       "value":"mexican grocery store" 
      } 
     } 
    }, 
    "from":0, 
    "size":20, 
    "suggest":{ 
     "category-suggest":{ 
      "text":"mexican grocery store", 
      "completion":{ 
       "field":"suggest","fuzzy":{"fuzziness":2} 
      } 
     } 
    } 
} 

{ 
    "took":19, 
    "timed_out":false, 
    "_shards":{"total":5,"successful":5,"failed":0}, 
    "hits":{ 
     "total":0,"max_score":null,"hits":[] 
    }, 
    "suggest":{ 
     "category-suggest":[ 
      { 
       "text":"mexican grocery store", 
       "offset":0, 
       "length":21, 
       "options":[ 
        { 
         "text":"Mexican Grocery Store", 
         "score":1.0, 
         "payload":{"id":5915028960051200} 
        } 
       ] 
      } 
     ] 
    } 
} 

だけでなく、完全一致の場合は「Mexican」という文字列を入力すると、「Medical」という単語を含むカテゴリが「Mexican」カテゴリの前にリストされます。カテゴリは私にも意味をなさないものです。 stringとして

{ 
    "query":{ 
     "fuzzy":{ 
      "categoryDescription":{ 
       "value":"mexican" 
      } 
     } 
    }, 
    "from":0, 
    "size":20, 
    "suggest":{ 
     "category-suggest":{ 
      "text":"mexican", 
      "completion":{ 
       "field":"suggest","fuzzy":{"fuzziness":2} 
      } 
     } 
    } 
} 

{ 
    "took":11, 
    "timed_out":false, 
    "_shards":{ 
     "total":5, 
     "successful":5, 
     "failed":0 
    }, 
    "hits":{ 
     "total":25, 
     "max_score":3.8085938, 
     "hits":[ 
      { 
       "_index":"categories", 
       "_type":"category", 
       "_id":"4993638215974912", 
       "_score":3.8085938, 
       "_source":{ 
        "id":4993638215974912, 
        "categoryDescription":"Medical Spa", 
        "suggest":{ 
         "input":["Medical Spa"], 
         "output":"Medical Spa", 
         "payload":{"id":4993638215974912}}}}, 
{"_index":"categories","_type":"category","_id":"6401013099528192","_score":3.8085938,"_source":{"id":6401013099528192,"categoryDescription":"Medical School","suggest":{"input":["Medical School"],"output":"Medical School","payload":{"id":6401013099528192}}}},{"_index":"categories","_type":"category","_id":"4712163239264256","_score":3.4429123,"_source":{"id":4712163239264256,"categoryDescription":"Medical Examiner","suggest":{"input":["Medical Examiner"],"output":"Medical Examiner","payload":{"id":4712163239264256}}}},{"_index":"categories","_type":"category","_id":"5978800634462208","_score":3.4429123,"_source":{"id":5978800634462208,"categoryDescription":"Medical Center","suggest":{"input":["Medical Center"],"output":"Medical Center","payload":{"id":5978800634462208}}}},{"_index":"categories","_type":"category","_id":"5415850681040896","_score":3.4429123,"_source":{"id":5415850681040896,"categoryDescription":"Medical Clinic","suggest":{"input":["Medical Clinic"],"output":"Medical Clinic","payload":{"id":5415850681040896}}}},{"_index":"categories","_type":"category","_id":"4852900727619584","_score":2.75433,"_source":{"id":4852900727619584,"categoryDescription":"Medical Billing Service","suggest":{"input":["Medical Billing Service"],"output":"Medical Billing Service","payload":{"id":4852900727619584}}}},{"_index":"categories","_type":"category","_id":"5352079006629888","_score":2.4411354,"_source":{"id":5352079006629888,"categoryDescription":"Mexican Restaurant","suggest":{"input":["Mexican Restaurant"],"output":"Mexican Restaurant","payload":{"id":5352079006629888}}}},{"_index":"categories","_type":"category","_id":"5915028960051200","_score":2.143557,"_source":{"id":5915028960051200,"categoryDescription":"Mexican Grocery Store","suggest":{"input":["Mexican Grocery Store","shop"],"output":"Mexican Grocery Store","payload":{"id":5915028960051200}}}},{"_index":"categories","_type":"category","_id":"6392217006505984","_score":2.0527549,"_source":{"id":6392217006505984,"categoryDescription":"Latin American Restaurant","suggest":{"input":["Latin American Restaurant"],"output":"Latin American Restaurant","payload":{"id":6392217006505984}}}},{"_index":"categories","_type":"category","_id":"5149768867119104","_score":2.0527549,"_source":{"id":5149768867119104,"categoryDescription":"Occupational Medical Physician","suggest":{"input":["Occupational Medical Physician"],"output":"Occupational Medical Physician","payload":{"id":5149768867119104}}}},{"_index":"categories","_type":"category","_id":"5157465448513536","_score":2.0527549,"_source":{"id":5157465448513536,"categoryDescription":"Central American Restaurant","suggest":{"input":["Central American Restaurant"],"output":"Central American Restaurant","payload":{"id":5157465448513536}}}},{"_index":"categories","_type":"category","_id":"6479078425100288","_score":2.0527549,"_source":{"id":6479078425100288,"categoryDescription":"American Football Field","suggest":{"input":["American Football Field"],"output":"American Football Field","payload":{"id":6479078425100288}}}},{"_index":"categories","_type":"category","_id":"4789129053208576","_score":1.9529084,"_source":{"id":4789129053208576,"categoryDescription":"Mexican Goods Store","suggest":{"input":["Mexican Goods Store","shop"],"output":"Mexican Goods Store","payload":{"id":4789129053208576}}}},{"_index":"categories","_type":"category","_id":"5275113192685568","_score":1.9138902,"_source":{"id":5275113192685568,"categoryDescription":"Medical Laboratory","suggest":{"input":["Medical Laboratory"],"output":"Medical Laboratory","payload":{"id":5275113192685568}}}},{"_index":"categories","_type":"category","_id":"5838063146106880","_score":1.7436681,"_source":{"id":5838063146106880,"categoryDescription":"Medical Group","suggest":{"input":["Medical Group"],"output":"Medical Group","payload":{"id":5838063146106880}}}},{"_index":"categories","_type":"category","_id":"4649491076481024","_score":1.7436681,"_source":{"id":4649491076481024,"categoryDescription":"American Restaurant","suggest":{"input":["American Restaurant"],"output":"American Restaurant","payload":{"id":4649491076481024}}}},{"_index":"categories","_type":"category","_id":"5458456756617216","_score":1.5311122,"_source":{"id":5458456756617216,"categoryDescription":"Traditional American Restaurant","suggest":{"input":["Traditional American Restaurant"],"output":"Traditional American Restaurant","payload":{"id":5458456756617216}}}},{"_index":"categories","_type":"category","_id":"6183309797228544","_score":1.5311122,"_source":{"id":6183309797228544,"categoryDescription":"Public Medical Center","suggest":{"input":["Public Medical Center"],"output":"Public Medical Center","payload":{"id":6183309797228544}}}},{"_index":"categories","_type":"category","_id":"6706677332049920","_score":1.5311122,"_source":{"id":6706677332049920,"categoryDescription":"Native American Goods Store","suggest":{"input":["Native American Goods Store","shop"],"output":"Native American Goods Store","payload":{"id":6706677332049920}}}},{"_index":"categories","_type":"category","_id":"6119538122817536","_score":1.3949344,"_source":{"id":6119538122817536,"categoryDescription":"Medical Supply Store","suggest":{"input":["Medical Supply Store","shop"],"output":"Medical Supply Store","payload":{"id":6119538122817536}}}}]},"suggest":{"category-suggest":[{"text":"mexican","offset":0,"length":7,"options":[{"text":"Medical Billing Service","score":1.0,"payload":{"id":4852900727619584}},{"text":"Medical Center","score":1.0,"payload":{"id":5978800634462208}},{"text":"Medical Clinic","score":1.0,"payload":{"id":5415850681040896}},{"text":"Medical Examiner","score":1.0,"payload":{"id":4712163239264256}},{"text":"Medical Group","score":1.0,"payload":{"id":5838063146106880}}]}]}} 

答えて

2

あなたのインデックスフィールドcategoryDescription、そうElasticsearchは、あなたの入力にその標準アナライザを実行すると、3つのトークン、[mexican, grocery, store]Mexican Grocery Storeをオンされます。

クエリは用語クエリのファミリに属します。つまり、用語レベルで動作し、アナライザを通過しません。入力がMexican Grocery Storeのファジィクエリは、これらの単語を3つの単語としてではなく1つの単語としてマッチさせようとします。完全な句が索引に1つの用語として存在しないため、何も見つかりません。分析されないcategoryDescriptionにサブフィールドを追加するか、小文字のトークンフィルタのみを使用して、このフィールドでファジィクエリを実行して「完全一致」を生成することができます。

第2部分では、ファジークエリは、変更された一致(ファジーが適用された場合)と完全一致を区別しません。 実際の検索が実行される前に、ファジー用語は、指定されたフィールド内のすべての用語のリストに対して内部的に照合され、展開されます。 Medical Spaのようなものが全く返され、なぜあなたの例では、このことから

"boolean": { 
    "should": [ 
    { 
     "term": { 
     "categoryDescription": "medical" 
     } 
    }, 
    { 
     "term": { 
     "categoryDescription": "mexican" 
     } 
    } 
    ] 
} 

のようなものになり、それは明らかです。これらのヒットもMexican Grocery Storeより高いスコアを持つので、最初に返されます。私はこれが用語頻度(メキシコよりも頻繁に現れるメキシコ人)によると思われますが、explainで質問を再実行して、なぜスコアが高いのかを正確に確認する必要があります。

あなたはファジーマッチにペナルティを適用する場合は、ブールクエリにファジーや用語のクエリをラップすることができます:これはfuzzy部分がで一致したドキュメントのスコアを削減する

{ 
    "query": { 
    "boolean": { 
     "should": [ 
     { 
      "fuzzy": { 
      "categoryDescription": "mexican" 
      } 
     }, 
     { 
      "term": { 
      "categoryDescription": "mexican" 
      } 
     } 
     ] 
    } 
    } 
} 

半分(ブールクエリのcoord factorのため)。

+0

ああ、うわー!どのような素晴らしい説明。どうもありがとうございました:)ファジークエリの仕組みが実際にどのように機能するかを理解するのに役立ちます。私が期待していることを達成するのに役立つインデックスを手に入れたほうがいいですか? –

+0

私はある時点でnGramアナライザを使用しようとしましたが、カテゴリーBarと他のカテゴリにBarという単語が含まれている問題が発生していました。リストに最初に表示され、再び正確に一致するBarを表示するだけではありません。 –

+0

nGramも同様の問題があります。 'Bar'と' Barn'のために同じ言葉を作り、それを区別することは不可能です。私の答えである2つの提案(https://www.found。no/play/gist/dba4dec7672146946de9c80fb8656e7c - あなたが望むものを達成する方法を知りたければ、あなたの目標を説明する新しい質問をし、この質問に直接質問する方が良いでしょう。 – knutwalker

関連する問題