2016-10-26 10 views
1

特定の用語の不在を肯定的に押し上げるにはどうすればよいですか?私はhereの前にこの質問をしましたが、十分に一般化することができなかったため、回答は満足できませんでした。弾性検索:特定の条件の不在を高める

ニュアンスを増やして、もう一度試してみましょう。

ラップトップと付属品を区別したいと思っています。人間の言葉では、これは用語の不在によって行われます。つまり、lenovo thinkpadと言うときは、batteryという単語を省略すると、実際のラップトップが必要なことになります。人がlenovo thinkpad batteryと言っているときと比較すると、バッテリーの意味が分かります。マッピングと

PUT test_index 
{ 
    "settings": { 
     "index": { 
      "number_of_shards": 1, 
      "number_of_replicas": 1 
     } 
    } 
} 

PUT test_index/_mapping/merchant 
{ 
    "properties": { 
     "title": { 
      "type": "string" 
     }, 
     "category": { 
      "type": "string", 
      "index": "not_analyzed" 
     } 
    } 
} 

がそれに二つのアイテムを入れる:

は、だから我々は、インデックスがあるとし

PUT test_index/merchant/3 
{ 
    "title": "macbook battery", 
    "category": "laptops accessories" 
} 
PUT test_index/merchant/2 
{ 
    "title": "lenovo thinkpad battery", 
    "category": "laptops accessories" 
} 
PUT test_index/merchant/1 
{ 
    "title": "lenovo thinkpad white/black", 
    "category": "laptops" 
} 

今すぐ検索をlenovo thinkpad

POST test_index/_search 
{ 
    "query":{ 
     "match": { "title": "lenovo thinkpad" } 
    } 
} 

結果は次のとおり通知lenovo thinkpad batterylenovo thinkpad white/blackよりも起動していること

"hits": [ 
    { 
     "_index": "test_index", 
     "_type": "merchant", 
     "_id": "2", 
     "_score": 0.70710677, 
     "_source": { 
     "title": "lenovo thinkpad battery", 
     "category": "laptops accessories" 
     } 
    }, 
    { 
     "_index": "test_index", 
     "_type": "merchant", 
     "_id": "1", 
     "_score": 0.70710677, 
     "_source": { 
     "title": "lenovo thinkpad white/black", 
     "category": "laptops" 
     } 
    } 
] 

今、これを行うには少なくとも2つの合理的な方法があります。

A)titleの関連性に影響を与えるために、カテゴリごとの頻度を使用します。たとえば、カテゴリごとに95%パーセンタイルの単語を抽出すると、batteryは頻度が高いので、単語batterytitleのすべてのクエリで負の値にする必要があります。

B)categoryとの関連性に影響を与えるために、カテゴリごとの頻度を使用します。たとえば、タイトルの一致に加えて、titleの一致に含まれていない95%パーセンタイルの条件を持つカテゴリの結果を自動的に否定的にブーストします。

AとBは全く同じではありませんが、どちらも関連性を考慮して特定の不在単語を考慮する必要があるという考えに基づいています。

だから......思考?

答えて

0

は私の投票はバッテリーがカテゴリとして「ラップトップ」を持たないように C) はカテゴリーを修正だろう(それはまた、追加のカテゴリを作成する)「laptopAccessory」または単に「アクセサリー」(と呼ばれるではありません実際のマシン自体を示すために「ラップトップ」と呼ばれます)。

アクセサリを下ろそうとするのではなく、「ラップトップ」カテゴリにブーストを適用します(あまり曖昧ではありません)。これはあなたの 'lenovo thinkpad'の例のように、実際の機械を付属品の上に持ってくるように最初の検索を行います。もっと正確な検索( 'lenovo thinkpad battery')は期待通りに機能します。

もう1つの素晴らしいUI/UXエクスペリエンスは、結果に返されたカテゴリの合計セットを取得し、簡単なフィルタリンクを提供することです。したがって、最初の検索で「ラップトップ」「アクセサリー」「支払いプラン」が返された場合、元の検索とそのカテゴリのフィルターを使用する再クエリへのリンクとして、それぞれのリンクがあります。

幸運を祈る!

+0

に設定ブーストプロパティでクエリの下に確認してください、私は、カテゴリ名だけでなく、タイトルに一致すると考えられてきたので、私はあなたが何かに上だと思います。しかし、私はあなたが説明したことを詳細に理解しているかどうかはわかりません。関連するクエリや関連するマッピングの変更をお願いしますか? :-) – oneloop

+0

@Anugaの答えで述べたように私は増強を話していました。たぶん彼はちょうどブーストを高すぎる。 – Thunder

0

ブースト「その」カテゴリ。

GET /test_index/merchant/_search 
{ 
    "from": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     {"match": {"title": "lenovo thinkpad"}} 
     ], 
     "should": [ 
     { 
      "match": { 
      "category": { 
       "boost": "2", 
       "query": "laptops" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "size": "10" 
} 

結果:

{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
    "total": 1, 
    "successful": 1, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 2, 
    "max_score": 1.573319, 
    "hits": [ 
     { 
     "_index": "index", 
     "_type": "merchant", 
     "_id": "1", 
     "_score": 1.573319, 
     "_source": { 
      "title": "lenovo thinkpad white/black", 
      "category": "laptops" 
     } 
     }, 
     { 
     "_index": "index", 
     "_type": "merchant", 
     "_id": "2", 
     "_score": 0.15889977, 
     "_source": { 
      "title": "lenovo thinkpad battery", 
      "category": "laptops accessories" 
     } 
     } 
    ] 
    } 
} 

より高める上で、私たちは、その用語のクエリながら、提供されたブーストプロパティを使用して、特定の用語の不在を更新することができfound here

+0

正確なクエリを使用して 'lenovo thinkpad'を' lenovo thinkpad battery'に置き換えると、最初の結果としてバッテリーが得られないので、これは動作しません。 – oneloop

0

することができます。 10.実際

GET /test_index/students/_search 
{ 
    "from": 0, 
    "query": { 
    "bool": { 
     "must": [ 
     {"match": {"age": "20"}} 
     ], 
     "should": [ 
     { 
      "match": { 
      "category": { 
       "boost": "10", 
       "query": "students" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "size": "10" 
} 
関連する問題