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/

 

 

 

猜你喜欢

转载自ylzhj02.iteye.com/blog/2237918
今日推荐