का उपयोग कर किसी फ़ील्ड के सबस्ट्रिंग द्वारा फ़िल्टर करें मेरे पास एक Django प्रोजेक्ट है जो अनुक्रमण के लिए एसओएलआर का उपयोग करता है।Django Haystack - SearchQuerySet()
मैं Haystack के SearchQuerySet वर्ग का उपयोग कर एक सबस्ट्रिंग खोज करने के लिए कोशिश कर रहा हूँ।
उदाहरण के लिए, जब अवधि "कान", यह प्रविष्टि मूल्य के साथ एक क्षेत्र है कि लौटना चाहिए की खोज करता है: "खोज"। आप देख सकते हैं, "कान"के SUBSTRING "खोज" है। (जाहिर है :))
दूसरे शब्दों में, एक आदर्श Django दुनिया में मैं की तरह कुछ करना चाहते हैं: SearchQuerySet (https://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#field-lookups) के लिए
SearchQuerySet().all().filter(some_field__contains_substring='ear')
भूसे के ढेर प्रलेखन में, यह कहते हैं कि केवल निम्नलिखित क्षेत्र LOOKUP प्रकार समर्थित हैं:
- सटीक शामिल 10
- जीटी, gte, लेफ्टिनेंट, एलटीई
- में
- startswith
- रेंज
मैं का उपयोग कर की कोशिश की __ हैं, लेकिन उसकी वास्तव में की तरह __exact, जो लग रहा है बर्ताव करता है एक वाक्य में सटीक शब्द (पूरा शब्द), एक शब्द का एक substring नहीं।
मैं उलझन में हूं, क्योंकि ऐसी कार्यक्षमता बहुत बुनियादी है, और मुझे यकीन नहीं है कि मुझे कुछ याद आ रहा है, या इस समस्या से संपर्क करने का एक और तरीका है (रेगेक्स या कुछ का उपयोग कर?)।
धन्यवाद
धन्यवाद! आपका जवाब 100% सही नहीं है, लेकिन यह मुझे सही दिशा में ले जाता है। समाधान ** NgramField ** का उपयोग करना था, ** EdgeNgramField ** नहीं, इस तरह: 'some_field = indexes.NgramField (model_attr = 'some_field')'। ** EdgeNgramField ** _ _ "से शुरू होता है" _ और _ "समाप्त होता है" _ फ़िल्टरिंग के प्रकार के साथ ही कर सकता है। – Nahn
मैं सोलर के साथ काम नहीं कर रहा था लेकिन ElastiSearch के साथ ** NgramField ** का उपयोग किया। –
एजग्राम फ़ील्ड '__contains' की तरह काम नहीं कर रहा है, यह उपजी के आधार पर काम करता है और अन्य मैचों को ढूंढता है, इसलिए यह इसमें से अधिक अस्पष्ट परिणाम सेट पर पहुंच जाएगा। – shredding