/ / Django पूर्ण पाठ खोज: कहते हैं अस्वीकार मौजूद नहीं है - django, postgresql, पूर्ण पाठ खोज

Django पूर्ण पाठ खोज: कहते हैं कि असंतोष मौजूद नहीं है - django, postgresql, पूर्ण-पाठ-खोज

मैं Django 2.0 और postgresql 9.6 का उपयोग कर रहा हूं

मैंने अपने ऐप (लेखों) में माइग्रेशन और खाली फ़ाइल बनाई है, जिसमें निम्नलिखित सामग्री के साथ अनैसेंट और ट्रिग्राम एक्सटेंशन शामिल हैं

# Generated by Django 2.0 on 2018-02-06 22:34

from django.db import migrations
from django.contrib.postgres.operations import UnaccentExtension, TrigramExtension


class Migration(migrations.Migration):

dependencies = [
("articles", "0012_auto_20180205_2234"),
]

operations = [
UnaccentExtension(),
TrigramExtension()
]

फिर मैं निम्नलिखित क्वेरी चलाने की कोशिश करता हूं:

from django.contrib.postgres.search import SearchQuery, SearchRank, SearchVector
vector = SearchVector("title",config="unaccent", weight="A") + SearchVector("description",config="unaccent", weight="B")
query = SearchQuery("india")
Article.objects.annotate(rank=SearchRank(vector, query)).filter(rank__gte=0.3).order_by("rank")

ProgrammingError: text search configuration "unaccent" does not exist
LINE 1: ...rticle"."qa_bool", ts_rank((setweight(to_tsvector("unaccent"...

उत्तर:

जवाब के लिए 0 № 1

मुझे लगता है कि आपके माइग्रेशन फ़ाइल हेवन ने आपके डेटाबेस में निर्दिष्ट PostgreSQL एक्सटेंशन नहीं बनाया है।

हो सकता है कि आपके डेटाबेस उपयोगकर्ता के पास सुपरसुसर विशेषाधिकार न हों।

Django प्रलेखन इसे अनुभाग में समझाता है माइग्रेशन का उपयोग करके विस्तार करना:

एक्सटेंशन बनाने के लिए डेटाबेस उपयोगकर्ता की आवश्यकता होती हैसुपरसुसर विशेषाधिकारों के साथ। यदि Django डेटाबेस उपयोगकर्ता के पास सुपरसुसर विशेषाधिकार नहीं हैं, तो आपको Django माइग्रेशन के बाहर ऐसे एक्सटेंशन का निर्माण करना होगा जिसमें उपयुक्त विशेषाधिकार हैं। उस स्थिति में, अपने Django डेटाबेस से कनेक्ट करें और क्वेरी चलाएँ CREATE EXTENSION IF NOT EXISTS hstore;

मैं आपके कोड को फिर से पढ़ता हूं और मुझे लगता है कि समस्या है config="unaccent" आप उपयोग नहीं कर सकते unaccent एक विन्यास के रूप में लेकिन आपको एक भाषा पास करनी होती है (जैसे: "इटैलियन") या "सरल"