Django-haystack: استخدام solr كخلفية فشل في البحث الأول

تم إنشاؤها على ١ مايو ٢٠١٥  ·  41تعليقات  ·  مصدر: django-haystack/django-haystack

أنا أستخدم solr كخلفية لكومة قش. قمت بتنفيذ جميع أوامر الإعداد (إنشاء schema.xml ، إلخ) ولكن عندما أحاول إجراء البحث الأول ، حدث استثناء.

هذه هي بيئة الثعبان الخاصة بي:

Django==1.8
django-filter==0.9.2
django-haystack==2.3.1
djangorestframework==3.1.1
Markdown==2.6.1
Pillow==2.8.1
psycopg2==2.6
pysolr==3.3.0
requests==2.6.0

الاستثناء الذي أواجهه هو هذا:

'list' object has no attribute 'split'

يبدو أن هذا يحدث لأن solr يستجيب بقائمة لحقل django_ct لكني أعتقد أن كومة قش تتوقع سلسلة.

هذا هو تتبع المكدس:

Environment:


Request Method: GET
Request URL: http://localhost:8000/api/1.0/p/products/?search=test

Django Version: 1.8
Python Version: 3.4.0
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.gis',
 'rest_framework',
 'rest_framework.authtoken',
 'django_filters',
 'haystack',
 'deliveries',
 'products',
 'stores',
 'users')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware')


Traceback:
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/rest_framework/views.py" in dispatch
  452.             response = self.handle_exception(exc)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/rest_framework/views.py" in dispatch
  449.             response = handler(request, *args, **kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/rest_framework/generics.py" in get
  199.         return self.list(request, *args, **kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/rest_framework/mixins.py" in list
  41.         page = self.paginate_queryset(queryset)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/rest_framework/generics.py" in paginate_queryset
  170.         return self.paginator.paginate_queryset(queryset, self.request, view=self)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/rest_framework/pagination.py" in paginate_queryset
  299.             self.page = paginator.page(page_number)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/core/paginator.py" in page
  50.         number = self.validate_number(number)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/core/paginator.py" in validate_number
  39.         if number > self.num_pages:
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/core/paginator.py" in _get_num_pages
  86.             if self.count == 0 and not self.allow_empty_first_page:
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/django/core/paginator.py" in _get_count
  77.                 self._count = len(self.object_list)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/haystack/query.py" in __len__
  91.             self._result_count = self.query.get_count()
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/haystack/backends/__init__.py" in get_count
  626.                 self.run()
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/haystack/backends/solr_backend.py" in run
  699.         results = self.backend.search(final_query, **search_kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/haystack/backends/__init__.py" in wrapper
  35.             return func(obj, query_string, *args, **kwargs)
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/haystack/backends/solr_backend.py" in search
  136.         return self._process_results(raw_results, highlight=kwargs.get('highlight'), result_class=kwargs.get('result_class', SearchResult), distance_point=kwargs.get('distance_point'))
File "/home/nicolas/ding-dong/dingdong-django/venv34/lib/python3.4/site-packages/haystack/backends/solr_backend.py" in _process_results
  374.             app_label, model_name = raw_result[DJANGO_CT].split('.')

Exception Type: AttributeError at /api/1.0/p/products/
Exception Value: 'list' object has no attribute 'split'

وهذه هي المتغيرات المحلية في الاستثناء:

None
raw_results 
<pysolr.Results object at 0x7fb8df0a64a8>
result_class    
<class 'haystack.models.SearchResult'>
hits    
1
unified_index   
<haystack.utils.loading.UnifiedIndex object at 0x7fb8df1b0048>
raw_result  
{'_version_': 1499926380381470720,
 'categories': ['Category object'],
 'description': ['Descripcion test'],
 'django_ct': ['products.product'],
 'django_id': [1],
 'ean': [111],
 'id': 'products.product.1',
 'name': ['Producto test 1'],
 'name_auto': ['Producto test 1'],
 'score': 0.14093116,
 'text': ['Producto test 1\n'
          '111\n'
          '\n'
          '    Categoria test\n'
          '\n'
          'Descripcion test\n'
          'None']}
distance_point  
None
stats   
{}
indexed_models  
[<class 'products.models.Product'>]
key 
'fields'
spelling_suggestion 
None
self    
<haystack.backends.solr_backend.SolrSearchBackend object at 0x7fb8df24e748>
connections 
<haystack.utils.loading.ConnectionHandler object at 0x7fb8ff447208>
results 
[]
facets  
{'dates': {}, 'fields': {}, 'queries': {}}

كما ترى فإن django_ct قائمة وليست سلسلة.

هو موضع تقدير أي مساعدة.

solr highpriority

التعليق الأكثر فائدة

بعد 3-4 أيام وصلت إلى الحل.

الحل 1-: التغيير في المخطط

الخطوة 1: انتقل إلى ملف المخطط المُدار للمجموعة وقم بتحريره
الخطوة 2: ابحث عن <field name="django_ct" type="text_general"/> إلى <field name="django_ct" type="string"/>

  • إصدار نظام التشغيل: Ubuntu 14.04 LTS
  • إصدار محرك البحث: Solr 7.2.1
  • إصدار Python: 3.4.3
  • إصدار Django: 2.0
  • إصدار كومة القش: 2.8.0

الحل 2-: ملف هاك كور

الخطوة 1: sudo vim / home / your path / site-packs / haystack / backends / solr_backend.py
الخطوة 2: ابحث عن app_label, model_name = raw_result[DJANGO_CT].split('.') إلى app_label, model_name = raw_result[DJANGO_CT][0].split('.')

ال 41 كومينتر

بالمناسبة ، الاستعلام الذي أقوم به هو هذا:

results = SearchQuerySet().filter(content=Clean(value)).models(Product)

لقد وجدت أن solr لم يكن باستخدام ملف schema.xml الذي تم إنشاؤه. الآن يشتكي Solr من هذا:

test_shard1_replica1: org.apache.solr.common.Solr استثناء: org.apache.solr.common.SolrException : تعذر تحميل conf لـ core test_shard1_replica1: فشل تهيئة المكون الإضافي لحقل [schema.xml] اكتب "sint": خطأ في تحميل فئة solr .SortableIntField '. ملف المخطط هو /configs/test/schema.xml

أواجه نفس المشكلة أيضًا. كنت أتساءل عما إذا كان ملف schema.xml موجودًا في الدليل الصحيح ، على الرغم من أنني لم أكن متأكدًا من أي مكان آخر يمكنني وضعه فيه. لقد قمت بوضعه ضمن "server / solr / core_name_here / conf /" ورأيت أن السجل يخبرني أن هناك ملف schema.xml غير متوقع وأنه يجب علي إزالته لأنه كان يُدار بالفعل أو بعضًا من هذا القبيل.

حسنًا ، لقد كنت أحاول فرز هذه المشكلة لعدة أيام ، وأخيراً وصلت إلى الجزء السفلي منها. انظر هنا: http://stackoverflow.com/questions/30427643/fields-in-apache-solr-response-are-multivalued-when-they-should-be-singular/30484017#30484017

لا يبدو Haystack متوافقًا مع Solr v5. *. بمجرد اتباع الإرشادات المذكورة أعلاه لإصلاح هذه المشكلة ، ستواجه مشكلة في الفئات والفئات المهملة التي تمت إزالتها تمامًا من Solr ، مثل https://lucene.apache.org/solr/4_2_0/solr-core/ org / apache / solr / schema / SortableIntField.html.

لم أحاول هذا بعد ، لكنني أقترح ربما التراجع إلى Solr v4. * أو ربما حتى v.3.5 وفقًا للمستندات. يجب على شخص ما تحديث المستندات لتعكس ذلك وإجراء مزيد من الاختبارات.

بدلاً من ذلك ، إذا كنت معتادًا على Solr ، فيمكنك محاولة تعديل schema.xml ، لكنني لا أعرف ما إذا كنت ستواجه أي مشاكل أخرى في المستقبل.

تذكرة ذات صلة:
https://github.com/django-haystack/django-haystack/issues/1199

4.x مدعوم بالتأكيد - جميع الاختبارات تعمل مقابل 4.7. sampeka شكرا

تحقق من تعليقي على # 1183. لست متأكدًا مما إذا كنت قد واجهت مشاكل أسفل السطر ، لكنني استخدمت للتو أحد ملف schema.xml الافتراضي ولصقه في حقول Django المناسبة للحصول على فهرسة للعمل على Solr 5.1. سيتعين عليك إضافة الحقول حسب الحاجة لنماذجك المحددة ، لكن هذا جعلني بعيدًا عن الأرض. أنا لست بعيدًا جدًا عن تطبيق Django ، لكن هذا أدى إلى rich_content_extraction على الأقل إدخال المحتوى في الفهرس الخاص بي.

@ nikolaz111 لقد اكتشفت بعض الخطوات لإصلاح هذا الخطأ مؤقتًا:

  • في solrconfig.xml ، قم بتغيير مصنع المخطط الافتراضي إلى فئة ClassicIndexSchemaFactory
  • للفئة initParams:
<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
    <lst name="defaults">
      <str name="df">_text_</str>
    </lst>
  </initParams>

تغيير إلى

<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell">
            <lst name="defaults">
            <str name="df">text</str>
            </lst>
</initParams>
  • تشغيل mange.py rebild_index
  • نظرًا لأننا استبدلنا schema.xml بالنواة ، فتجنب استخدام ManagedIndexSchemaFactory ، فلن يتم استدعاء العديد من الفئات في solrconfig.xml. هناك xml الذي أستخدمه الآن ، وآمل أن يهتم به أحد
    https://gist.github.com/DrChai/033604cd04c869f40ade

هل حصل أي شخص على Solr 5 للعمل مع Haystack؟

أواجه خطأ واحدًا تلو الآخر. عالق حاليًا على Error instantiating class: 'org.apache.lucene.analysis.core.StopFilterFactory' لنوع الحقل text_general.

لدي العمل حاليا. توصيتي الأكبر للبدء هي استخدام Solr schema.xml الافتراضي وإضافة حقول Django الضرورية ببساطة. ستحتاج إلى إضافة id و django_ct و * _exact (لقد رميته للتو كحقل ديناميكي) وربما بضعة آخرين. أعتقد أنه سيوفر عليك الكثير من الوقت بدلاً من الذهاب في الاتجاه المعاكس.

لقد استسلمت ، وتمسكت بالمخطط "الديناميكي" الذي يبدو أن Solr يتخلف عنه.

يبدو أن هذا قد نجح معي https://github.com/nazariyg/Solr-5-for-django-haystack

تبدو إيجابية ، سأجربها وأبلغ عنها مرة أخرى.

يعمل حل nazariyg بالنسبة لي. ياله من صداع.

nazariyg ما إصدار Haystack & Django الذي تستخدمه مع الحل البديل الخاص بك؟
أنا على Django 1.9.4 وقمت بتنزيل Haystack 2.5 بتجربة Solr 5.5 على Win
قبل الحل البديل الخاص بك ، لم أتمكن من استرداد نتيجة واحدة من Solr ، وما زلت الآن أواجه المشكلة

كائن _'list 'ليس له سمة' Split'_

ألقى solr_backend.py في هذه النقطة

  for raw_result in raw_results.docs:
            app_label, model_name = raw_result[DJANGO_CT].split('.') 

اضطررت إلى إجراء تكوينات إضافية عند الدمج مع SOLR6. لقد قمت بتوثيق الخطوات التي اتبعتها في الرابط التالي.

https://github.com/dekanayake/haystack_solr6

هل سيكون هناك حل للقضية؟ ليس حلاً.
لقد حاولت استخدام أحدث الإصدارات لكل شيء.

dekanayake جعل العلاقات العامة من فضلك.

إذن ، هل سيكون Haystack متوافقًا مع Solr 6؟

cauanicastro لقد كان منذ فترة. # 1504 أنهى بعض التحديثات لإنشاء المخطط لكنني كنت أقوم بتشغيله منذ فترة

لقد واجهت هذا الخطأ أيضًا. محبط للغاية

wagaman هل ما زال هذا الخطأ موجودًا؟

wagaman هل لديك

شكرا على الردود. لدي slor 6. لدي قاعدة بيانات حيث أقوم بتجميع HTML الخام لذلك كل صف كبير جدًا. عندما أقوم بإعادة إنشاء الفهرس ، فإنه يقول "المحتوى" ، خلية HTML الخاصة بي ، كبيرة جدًا. تابعت تعليمي على الانترنت لتغيير نوع من السلاسل إلى text_general.

pysolr.SolrError: Solr responded with an error (HTTP 400): [Reason: Exception writing document id piaoyouquan.piaoyou.1003 to the index; possible analysis error: Document contains at least one immense term in field="content" (whose UTF8 encoding is longer than the max length 32766), all of which were skipped. Please correct the analyzer to not produce such terms. The prefix of the first immense term is: '[60, 100, 105, 118, 32, 99, 108, 97, 115, 115, 61, 34, 114, 105, 99, 104, 95, 109, 101, 100, 105, 97, 95, 97, 114, 101, 97, 95, 112, 114]...', original message: bytes can be at most 32766 in length; got 86946. Perhaps the document has an indexed string field (solr.StrField) which is too large]

بعد ذلك ، يمكنني إنشاء الفهرس. ومع ذلك ، عندما أحاول البحث ، حصلت على "كائن" قائمة "ليس له سمة" تقسيم "". سوف أنشر الرموز أدناه.

AttributeError في / البحث /
كائن "قائمة" ليس له سمة "تقسيم"
طريقة الطلب: GET
عنوان URL للطلب: http://127.0.0.1 : 8000 / search /؟ q = w
إصدار Django: 1.10.1
نوع الاستثناء: AttributeError
قيمة الاستثناء:
كائن "قائمة" ليس له سمة "تقسيم"
موقع الاستثناء: /Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py في _process_results ، السطر 406
لغة Python القابلة للتنفيذ: /Users/ja/3.5/bin/python
إصدار بايثون: 3.5.1
مسار بايثون:
['/ Users / ja / Dropbox / Programming / Django / piaoyou'،
"/Users/ja/3.5/lib/python35.zip" ،
"/Users/ja/3.5/lib/python3.5" ،
"/Users/ja/3.5/lib/python3.5/plat-darwin" ،
"/Users/ja/3.5/lib/python3.5/lib-dynload" ،
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5" ،
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin"،
"/Users/ja/3.5/lib/python3.5/site-packages" ،
"/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages"]
وقت الخادم: الإثنين ، 26 يونيو 2017 05:01:18 +0000

بيئة:

طريقة الطلب: GET
عنوان URL للطلب: http://127.0.0.1 : 8000 / search /؟ q = w

إصدار Django: 1.10.1
إصدار بايثون: 3.5.1
التطبيقات المثبتة:
["دال" ،
"dal_select2"،
"custom_template" ،
"django.contrib.admin"،
"django.contrib.auth"،
"django.contrib.contenttypes" ،
"django.contrib.sessions"،
"django.contrib.messages"،
"django.contrib.staticfiles" ،
"بياويوكوان" ،
"rest_framework"،
'اسفل الصفحة'،
"crispy_forms"،
"taggit"،
"taggit_templatetags2"،
'كومة قش'،
"ووش"
"next_prev"،
'django_extensions']
البرامج الوسيطة المثبتة:
['django.middleware.security.SecurityMiddleware' ،
"django.contrib.sessions.middleware.SessionMiddleware" ،
"django.middleware.common.CommonMiddleware" ،
"django.middleware.csrf.CsrfViewMiddleware" ،
"django.contrib.auth.middleware.AuthenticationMiddleware" ،
"django.contrib.messages.middleware.MessageMiddleware" ،
'django.middleware.clickjacking.XFrameOptionsMiddleware']

تتبع الأثر:

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/paginator.py" قيد العد

  1. إرجاع self.object_list.count ()

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/query.py" قيد العد

  1. عودة لين (النفس)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/query.py" في __len__

  1. self._result_count = self.query.get_count ()

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/__init__.py" في get_count

  1. self.run ()

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py" قيد التشغيل

  1. النتائج = self.backend.search (final_query ، ** search_kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/__init__.py" في الغلاف

  1. إرجاع func (obj ، query_string ، args ، * kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py" في البحث

  1. Distance_point = kwargs.get ('مسافة_نقطة'))

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py" في _process_results

  1. app_label ، model_name = raw_result [DJANGO_CT] .split ('.')

أثناء معالجة الاستثناء أعلاه (الكائن "القائمة" ليس له سمة "تقسيم") ، حدث استثناء آخر:

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/handlers/exception.py" في الداخل

  1. استجابة = get_response (طلب)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/handlers/base.py" في _get_response

  1. response = self.process_exception_by_middleware (طلب)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/handlers/base.py" في _get_response

  1. رد = ملفوفة_الاستدعاء (طلب ، رد_حجم ، * رد_كوارغس)

الملف "/Users/ja/3.5/lib/python3.5/site-packages/django/views/generic/base.py" في العرض

  1. إرجاع self.dispatch (request، args، * kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/views/generic/base.py" قيد الإرسال

  1. معالج الإرجاع (الطلب ، args ، * kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/generic_views.py" في get

  1. إرجاع self.form_valid (نموذج)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/generic_views.py" في form_valid

  1. 'object_list': self.queryset

ملف "/Users/ja/Dropbox/Programming/Django/piaoyou/piaoyouquan/views.py" في get_context_data

  1. السياق = super (BillSearchView ، self) .get_context_data ( args ، * kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/views/generic/list.py" في get_context_data

  1. paginator، page، queryset، is_paginated = self.paginate_queryset (مجموعة الاستعلام ، حجم_الصفحة)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/views/generic/list.py" في paginate_queryset

  1. page = paginator.page (page_number)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/paginator.py" في الصفحة

  1. number = self.validate_number (رقم)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/paginator.py" في validate_number

  1. إذا كان الرقم> self.num_pages:

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/utils/functional.py" في __get__

  1. res = مثيل .__ ديكت __ [self.name] = self.func (مثيل)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/paginator.py" في num_pages

  1. if self.count == 0 وليس self.allow_empty_first_page:

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/utils/functional.py" في __get__

  1. res = مثيل .__ ديكت __ [self.name] = self.func (مثيل)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/django/core/paginator.py" قيد العد

  1. عودة لين (self.object_list)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/query.py" في __len__

  1. self._result_count = self.query.get_count ()

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/__init__.py" في get_count

  1. self.run ()

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py" قيد التشغيل

  1. النتائج = self.backend.search (final_query ، ** search_kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/__init__.py" في الغلاف

  1. إرجاع func (obj ، query_string ، args ، * kwargs)

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py" في البحث

  1. Distance_point = kwargs.get ('مسافة_نقطة'))

ملف "/Users/ja/3.5/lib/python3.5/site-packages/haystack/backends/solr_backend.py" في _process_results

  1. app_label ، model_name = raw_result [DJANGO_CT] .split ('.')

نوع الاستثناء: AttributeError at / search /
قيمة الاستثناء: كائن "القائمة" ليس له سمة "تقسيم"

اعتدت استخدام Whoosh مع Haystack ، لقد عملت بشكل جيد مع نفس الكود في Django.

Appium-Python-Client == 0.24
beautifulsoup4 == 4.4.1
cycler == 0.10.0
جانغو == 1.10
django-autocomplete-light == 3.2.7
علامات django-classy == 0.8.0
django-crispy-Forms == 1.6.1
ملحقات django == 1.7.9
مرشح django == 1.0.4
django-haystack == 2.6.1
django-next-prev == 1.0.1
django-pagedown == 0.1.3
django-taggit == 0.22.1
django-taggit-Templatetags2 == 1.6.1
django-uuslug == 1.1.8
djangorestframework == 3.6.3
dnspython == 1.15.0
EasyProcess == 0.2.3
الإعداد ez == 0.9
وكيل مستخدم مزيف == 0.1.7
جيفينت == 1.2.2
جرينليت == 0.4.12
كومة قش == 0.36
جيبا == 0.38
lxml == 3.6.0
تخفيض السعر == 2.6.8
matplotlib == 2.0.0
numpy == 1.11.0
أوليفيل == 0.44
وسادة = = 4.1.0
pydotplus == 2.0.2
pyparsing == 2.1.10
pytesseract == 0.1.7
بيثون داتوتيل == 2.6.0
python-slugify == 1.2.4
pytz == 2016.10.2020
عرض PyVirtualDisplay == 0.2.1
regex == 2016.4.25
الطلبات == 2.9.1
scikit-Learn == 0.18.1
scipy == 0.19.0
السيلينيوم == 3.4.3
ستة == 1.10.0
sklearn == 0.0
تسراكت == 0.1.3
tqdm == 4.14.0
Unidecode == 0.4.20
تحديث == 0.4.4
Werkzeug == 0.12.2
ووش == 2.7.4
winappdbg == 1.5
xvfbwrapper == 0.2.9

بعد 3-4 أيام وصلت إلى الحل.

الحل 1-: التغيير في المخطط

الخطوة 1: انتقل إلى ملف المخطط المُدار للمجموعة وقم بتحريره
الخطوة 2: ابحث عن <field name="django_ct" type="text_general"/> إلى <field name="django_ct" type="string"/>

  • إصدار نظام التشغيل: Ubuntu 14.04 LTS
  • إصدار محرك البحث: Solr 7.2.1
  • إصدار Python: 3.4.3
  • إصدار Django: 2.0
  • إصدار كومة القش: 2.8.0

الحل 2-: ملف هاك كور

الخطوة 1: sudo vim / home / your path / site-packs / haystack / backends / solr_backend.py
الخطوة 2: ابحث عن app_label, model_name = raw_result[DJANGO_CT].split('.') إلى app_label, model_name = raw_result[DJANGO_CT][0].split('.')

acdha ماذا عن هذا؟

هل يمكن لشخص لديه القدرة على إعادة إنتاج هذه المشكلة اكتشاف ما الذي يغير تكوين مخططه من الإعداد الافتراضي؟ من المفترض أن يستخدم Haystack string وفقًا لـ https://github.com/django-haystack/django-haystack/blob/9eb42dac5cd918c991ac7c939d6de81a02a1aba1/haystack/templates/search_configuration/schema.xml#81 اكتشفت أنه أصبح text_general بدلاً من ذلك.

@ krmritunjay11 هل يمكنك اختباره؟

كانت لدي مشكلة مماثلة وجربت الحل الثاني الذي نشره @ krmritunjay11 أعلاه ، لكنه لم ينجح بعد. عملت نفس التعليمات البرمجية والبيئة مع Whoosh.

بيئتي الحالية هي:
Requirements.txt ، وأنا أستخدم Solr 7.3.1 (لكنني جربت Solr 6.X وكنت أتلقى نفس الأخطاء)

كنت أتلقى الخطأ التالي:

File "<yourpath>/site-packages/django/db/models/fields/__init__.py", line 947, in get_prep_value
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

لقد غيرت السطر 947 في الملف أعلاه من

 return int(value)

إلى

 if isinstance(value, list):
     return int(value[0])
 return int(value)

هذا خلق خطأ آخر:

File "<your path>/site-packages/haystack/query.py", line 181, in post_process_results
    result.pk = result_klass(result.pk)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

الذي أصلحته بتغيير السطر 181 من

 result.pk = result_klass(result.pk)

إلى

 if isinstance(result.pk, list):
    result.pk = result_klass(result.pk[0])
 else:
   result.pk = result_klass(result.pk)

يعمل البحث الآن ، لكن الحل الذي أقدمه يبدو مبتذلًا وغير قوي.

هل لديك أي فكرة عن سبب حدوث ذلك وما إذا كان هناك حل أفضل؟

لقد وجدت حلاً آخر دون لمس ملفات django الأساسية.

في/site-packages/haystack/query.py ، تغيير السطر 181 من:

result.pk = result_klass(result.pk)

إلى:

result.pk = result_klass(result.pk[0])

ويضاف ما يلي قبل السطر 205:

pks = [pk[0] for pk in pks]

لذلك ينتهي الأمر بلوك try على النحو التالي:

207         try:
208             ui = connections[self.query._using].get_unified_index()
209             index = ui.get_index(model)
210             objects = index.read_queryset(using=self.query._using)
211             pks = [pk[0] for pk in pks]
212             return objects.in_bulk(pks)

نجح ذلك باستخدام django 1.11 و haystack 2.7.0 و solr 5.5.5

أهلا.

لدي نفس المشكلة والجمع بين الحلول من المعلقين الآخرين تمكنت من إيجاد حل عملي. من الجيد أنه يمكنك تجاوز SolrEngine واستخدام الإصدار الثابت الخاص بك حتى يتم إصلاحه في كومة القش.

أنا أستخدم كومة قش 2.8.1 و 8.5.2 سولر.

قم بتحرير ملف قش / backends / solr_backend.py للتحقق مما إذا كان يعمل من أجلك:

  • البحث والاستبدال
    python app_label, model_name = raw_result[DJANGO_CT].split('.')
    إلى
    python app_label, model_name = raw_result[DJANGO_CT][0].split('.')
  • البحث والاستبدال
    python result = result_class(app_label, model_name, raw_result[DJANGO_ID], raw_result['score'], **additional_fields)
    إلى
    python result = result_class(app_label, model_name, raw_result[DJANGO_ID][0], raw_result['score'], **additional_fields)
  • البحث والاستبدال
    python for key, value in raw_result.items(): value = value[0]
    إلى
    python for key, value in raw_result.items(): if isinstance(value, list): value = value[0]

كل العلاقات العامة موضع ترحيب.

كل العلاقات العامة موضع ترحيب.

نعم ، لكني لا أشعر أنني مؤهل بما يكفي لاقتراح حل عملي تمامًا. تعمل التغييرات الخاصة بي بشكل جيد تمامًا ، لكنني لم أختبر الإصدار السفلي من محرك Solr. هل لا يزال إنشاء العلاقات العامة يستحق؟

قابل للتكرار باستخدام django-haystack 3.0 و Solr 7.7.3

jcrbsa هل يمكنك تقديم اختبار رسوب؟ ليس لدي طريقة لإعادة إنتاج هذا.

acdha ، اتبع هذه الخطوات

بعد الاستعلام بالنموذج ، أظهر الخطأ التالي في solr_backend.py:
C: \ Python37 \ lib \ site -pack \ haystack \ backends \ solr_backend.py ، السطر 525 ، في _process_results

بعد التغيير في solr_backend.py والاستعلام الجديد حسب النموذج ، أظهر الخطأ التالي:
C: \ Python37 \ lib \ site -pack \ django \ db \ Models \ الحقول__init __. py ، السطر 1778 ، في get_prep_value

هذا لا يتكاثر ، ربما لأن لدي مخطط Solr قياسي يستخدم النوع المتوقع. هل يمكنك تقديم اختبار رسوب؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات