gaofeng0210 发表于 2016-12-17 06:25:27

Solr: index product and price for sellers and perfoming query and sorting

In my current project,  the modle seller has multiply products with price,  I want to index products and query them then sorting them by price , seller's credit ,the distance between the seller and the user while highlighting the matched products.
 
Due to solr flatten one-to-many relationship, so I should use multiVlaude field to store products and their prices for a seller. 
The schema likes

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="name" type="text_ch" indexed="true" stored="true" />
<field name="district" type="text_ch" indexed="true" stored="true" />
<field name="location" type="location_rpt" indexed="true" stored="true" multiValued="true"/>
<field name="commodities" type="text_ch" indexed="true" stored="true" multiValued="true"/>
<field name="price" type="long" indexed="true" stored="true" multiValued="true"/>
 
the data indexed likes

<doc>
<str name="id">1</str>
<str name="name">宜宾燃面</str>
<arr name="location">
<str>39.916927,116.363737</str>
</arr>
<int name="credit">90</int>
<str name="district">北京西城区</str>
<date name="created_at">2015-06-18T15:34:34Z</date>
<arr name="commodities">
<str>炒面</str>
<str>牛肉面</str>
</arr>
<arr name="price">
<long>23</long>
<long>18</long>
</arr>
<long name="_version_">1510459679273123840</long>
<str name="data_source">seller</str></doc>
<doc>
 
The option can't sort product by price.
 
How to do it?
---------------------------------------------------
How about to create two cores to meet  my demands?
sellers likes

<doc>
<str name="id">1</str>
<str name="name">宜宾燃面</str>
<arr name="location">
<str>39.916927,116.363737</str>
</arr>
<int name="credit">90</int>
<str name="district">北京西城区</str>
<date name="created_at">2015-06-18T15:34:34Z</date>
<long name="_version_">1510545445415288832</long>
<str name="data_source">seller</str></doc>
<doc>
 
products likes

<doc>
<str name="id">1</str>
<str name="name">炒面</str>
<str name="seller_id">1</str>
<long name="price">21</long>
<long name="_version_">1510545648643997696</long></doc>
<doc>
 
query likes

"params": {
"d": "50",
"indent": "true",
"spatial": "true",
"sfield": "location",
"hl.simple.pre": "<em>",
"wt": "json",
"hl": "true",
"fl": "*,score,dist:geodist()",
"q": "*:* AND _val_:\"product(scale(credit,1,10),recip(geodist(),3,1,0.1))\"\n",
"pt": "30.548526,104.062889",
"_": "1440573751492",
"hl.simple.post": "</em>",
"fq": [
"{!join fromIndex=products toIndex=sellers from=seller_id to=id} name:我要一份牛肉面",
"{!geofilt}"
]
 
but this option can not sort docs by  product's price and highlighting not work.  Meanwhile the product's fileds will not returned.
 
--------------------------------------
How about using nested document model?
but. I found this

All children of a parent document must be indexed together with the parent document. One cannot update any document (parent or child) individually. The entire block needs to be re-indexed of any changes need to be made.
 
Due to seller  updating his products frequently, this option cann't meet our situation.
 
 
--------------------------------------
 
 
 
 
References
http://stackoverflow.com/questions/7845337/sorting-with-multivalued-field-in-solr
  http://yonik.com/solr-nested-objects/
 
 
 
页: [1]
查看完整版本: Solr: index product and price for sellers and perfoming query and sorting