2015-04-21 7 views
5

मैं नेस्ट सी # के माध्यम से लोचदार खोज का उपयोग कर रहा हूं। मैं लोगों के बारे में जानकारी की बड़ी सूची हैस्ट्रिंग लम्बाई द्वारा लोचदार खोज आदेश

{ 
    firstName: 'Frank', 
    lastName: 'Jones', 
    City: 'New York' 
} 

मैं भी लंबाई से जिन लोगों के पास सिर्फ़ अपने नाम में 5 अक्षर है इतनी के रूप में फिल्टर करने और lastName द्वारा आइटम की यह सूची सॉर्ट करने के लिए सक्षम होने के लिए करना चाहते हैं जाएगा नतीजे सेट की शुरुआत में 10 अक्षर वाले लोगों को सेट करें।

तो कुछ छद्म कोड के साथ मैं की तरह list.wildcard("j*").sort(m => lastName.length)

मैं ElasticSearch ताकि किसी भी उदाहरण सुपर मददगार होगा नया हूँ कुछ करना चाहते हैं।

उत्तर

5

आप script-based sorting के साथ सॉर्टिंग कर सकते हैं। ,

POST /test_index/_search 
{ 
    "query": { 
     "match_all": {} 
    }, 
    "sort": { 
     "_script": { 
     "script": "doc['name'].value.length()", 
     "type": "number", 
     "order": "asc" 
     } 
    } 
} 
... 
{ 
    "took": 2, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 4, 
     "max_score": null, 
     "hits": [ 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "1", 
      "_score": null, 
      "_source": { 
       "name": "Bob" 
      }, 
      "sort": [ 
       3 
      ] 
     }, 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "4", 
      "_score": null, 
      "_source": { 
       "name": "Jose" 
      }, 
      "sort": [ 
       4 
      ] 
     }, 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "2", 
      "_score": null, 
      "_source": { 
       "name": "Jeff" 
      }, 
      "sort": [ 
       4 
      ] 
     }, 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "3", 
      "_score": null, 
      "_source": { 
       "name": "Darlene" 
      }, 
      "sort": [ 
       7 
      ] 
     } 
     ] 
    } 
} 

लंबाई के आधार पर फ़िल्टर करने के लिए मैं कर सकते हैं:

PUT /test_index 

POST /test_index/doc/_bulk 
{"index":{"_id":1}} 
{"name":"Bob"} 
{"index":{"_id":2}} 
{"name":"Jeff"} 
{"index":{"_id":3}} 
{"name":"Darlene"} 
{"index":{"_id":4}} 
{"name":"Jose"} 

तो मैं इस तरह खोज परिणामों आदेश कर सकते हैं:

एक खिलौना उदाहरण के रूप में, मैं कुछ दस्तावेजों के साथ एक छोटी सी सूचकांक की स्थापना एक समान तरीके से एक script filter का उपयोग करें:

POST /test_index/_search 
{ 
    "query": { 
     "filtered": { 
     "query": { 
      "match_all": {} 
     }, 
     "filter": { 
      "script": { 
       "script": "doc['name'].value.length() > 3", 
       "params": {} 
      } 
     } 
     } 
    }, 
    "sort": { 
     "_script": { 
     "script": "doc['name'].value.length()", 
     "type": "number", 
     "order": "asc" 
     } 
    } 
} 
... 
{ 
    "took": 3, 
    "timed_out": false, 
    "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 3, 
     "max_score": null, 
     "hits": [ 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "4", 
      "_score": null, 
      "_source": { 
       "name": "Jose" 
      }, 
      "sort": [ 
       4 
      ] 
     }, 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "2", 
      "_score": null, 
      "_source": { 
       "name": "Jeff" 
      }, 
      "sort": [ 
       4 
      ] 
     }, 
     { 
      "_index": "test_index", 
      "_type": "doc", 
      "_id": "3", 
      "_score": null, 
      "_source": { 
       "name": "Darlene" 
      }, 
      "sort": [ 
       7 
      ] 
     } 
     ] 
    } 
} 

यहाँ कोड मैं प्रयोग किया जाता है:

http://sense.qbox.io/gist/22fef6dc5453eaaae3be5fb7609663cc77c43dab

पी.एस .: तो अंतिम नाम के किसी भी रिक्त स्थान में शामिल होंगे, तो आप उस मैदान पर "index": "not_analyzed" उपयोग करने के लिए चाहते हो सकता है।

+2

मान लें कि वह अक्सर इस खोज को कई दस्तावेजों पर करता है, क्या यह केवल लंबाई को अनुक्रमणित करने योग्य होगा? – Robin

+0

हाँ, निश्चित रूप से, अगर यह एक विकल्प है। अच्छी बात। –

+0

इस तरह के महान प्रतिक्रिया के लिए धन्यवाद। @ रोबिन: अधिकांश भाग के लिए मेरा डेटा नहीं बदलेगा, इसलिए लंबाई को अनुक्रमणित करना मुझे लगता है कि यह फायदेमंद होगा। यदि आपके पास कोई संदर्भ है तो आप मुझे इंगित कर सकते हैं कि यह बहुत अच्छा होगा। – mvcNewbie

संबंधित मुद्दे