簡體   English   中英

在Solr中搜索的復雜查詢

[英]Complex query for searching in solr

我們在Solr搜索引擎中以以下格式存儲產品實體的數據。

{

id:unique_id,

...

...

...

price_per_quant: [
   "1-50|1",/* here price per quantity is save in key value pari e.g for quantity 1 to 50 price should be 1*/
   "51-100|2",
   "101-150|3",
   "151-200|4"
]


}

案例我需要遵循

  • 如果我搜索數量20,則應顯示以上結果。
  • 如果我搜索價格1,則應顯示上述結果。
  • 如果我搜索價格3和數量60,則不應顯示以上結果。

還有一件事:如何在這些price_per_quant字段上管理方面搜索?

我正在使用Solarium-project php庫與solr連接。

這是重做模式的一種可能方法。 希望這能給您一些想法。

我將假設您所有產品的每數量價格都低於50。 否則,您將需要縮短間隔時間。

定義一個名為price_upto_*動態字段,如下所示:

<dynamicField name="price_upto_*" type="integer" indexed="true" stored="true"/>

然后,您可以使用以下字段將文檔編入索引:

price_upto_50: 1,
price_upto_100: 2,
price_upto_150: 3,
price_upto_200: 4

這是您將如何為查詢編寫客戶端代碼的方法。 下面使用整數除法(意思是(20/50)= 0,(60/50)= 1,等等,)

查詢:如果我搜索數量20,則應顯示以上結果。

在您的客戶中,您需要進行計算:50 *(1 +(20/50))= 50 *(1 + 0)=50。因此,您要搜索的字段是price_upto_50 您的查詢將類似於q=price_upto_50:[* TO *]

查詢:如果我搜索價格1,則應顯示以上結果。

q=price_upto_50:1 OR price_upto_100:1 OR price_upto_150:1 OR price_upto_200:1

如您所見,如果每隔50個時間都有價格,這將變得很丑陋。因此,您可以按照此處的建議使用一個復制字段,然后將所有價格字段復制到該字段中,然后執行以下搜索:

q=price_upto_static:1

查詢:如果我搜索價格3和數量60,則不應顯示以上結果。

q=price_upto_100:3

(您的文檔將不匹配。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM