Dizin oluşturma için SOLR kullanan bir Django projem var. Django Haystack - SearchQuerySet kullanarak bir alanın alt dizine göre filtrele()
Ben samanlıkta en SearchQuerySet sınıfını kullanarak bir alt dize ara ' yapmaya çalışıyorum. Örneğinterimi "kulağa", bu değere sahip bir alan vardır girişi dönmelidir için arama yaptığında: "Ara". Gördüğünüz gibi, "kulak" "Ara" bir SUBSTRING olduğunu. (Besbelli :))
Başka bir deyişle, mükemmel bir Django dünyada ben gibi bir şey istiyorum: SearchQuerySet (https://django-haystack.readthedocs.org/en/latest/searchqueryset_api.html#field-lookups) için samanlık belgelerinde
SearchQuerySet().all().filter(some_field__contains_substring='ear')
, sadece aşağıdaki söylüyor SAHA ARA türü desteklenir:
- tam içerir 10
- gt, GTE, lt, LTE
- içinde
- startswith
- I __ içerir kullanılarak çalıştı, ancak bakar gibi tam olarak __exact, davranır
aralığı Bir cümlede tam sözcük (tüm kelime), bir kelimenin bir alt dizesi değil.
Kafam karıştı, çünkü böyle bir işlevsellik oldukça basit ve bir şeyleri kaçırdığımdan emin değilim, ya da bu probleme yaklaşmanın başka bir yolu var mı? (Regex'i mi kullanıyorsun?).
Teşekkür
EdgeNgramField alanını kullanarak yapılabilir
teşekkür ederiz! Cevabınız% 100 doğru değil, ama bana doğru yönde yol gösteriyor. Çözüm ** NeamField ** 'ı kullanmak değil, ** EdgeNgramField **' ı, bunun gibi: 'some_field = indexes.NgramField (model_attr = 'some_field')'. ** EdgeNgramField **, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – Nahn
Solr'la çalışmadım, ama ** NgramField ** kullanmam ElastiSearch ile benim için çalıştı. –
EdgeNgram Alanı, '__contains' gibi çalışmıyor, kaynaklanıyor ve sapları temel alan diğer eşleşmeleri buluyor, dolayısıyla içerden çok daha bulanık bir sonuç kümesine yol açıyor. – shredding