2014-06-26 26 views
5

Wersje:CentOS 6.4 + Haystack (2.1.0) + ElasticSearch (1.2.1) = SearchParseException ... analizowania awarii

CentOS   - 6.4 (Final) 
Haystack  - 2.1.0 
ElasticSearch - 1.2.1 
Java   - 1.7.0_55 
Django-cms  - 2.3.1 
pyelasticsearch - 0.6 

Mam problemy z używaniem ElasticSearch w Django projektu w Maszyna CentOS. Jestem przyzwyczajony do konfiguracji Elasticsearch/Haystack na maszynach Ubuntu i nigdy nie miałem takiego problemu.

Otrzymuję ten błąd Parse Failure [No parser for element [y]], ale mam pusty indeks. Starałem się dokładnie wiedzieć, gdzie przyszedł błąd z, więc próbowałem:

  • usunąć indeks i spróbuj ponownie (mam ten sam błąd)
  • spróbować z pustej Index (dostał ten sam błąd)
  • Instalowanie/zainstaluj -> wyczyszczony i ponownie zainstalować
  • próbowałem z starszych i nowszych wersji ES (0,90, 1,2, 1,1 ..)
  • Sprawdź wersję JAVA
  • Look dla wersji Niezgodności -

Początkowo sądziłem, że błąd spowodowany jest przez zawartość indeksu, dane, które próbowałem indeksować, ale po usunięciu/usunięciu indeksu wciąż mam ten sam błąd.

Próbuję pokazać pusty kwerendy ustawić w szablonie (bo nie wiem, co jeszcze spróbować dowiedzieć się, gdzie jest problem)

dodatkowe informacje

Kiedy otwieram Django powłoki z python manage.py shell i uczynić

from haystack.query import SearchQuerySet 

SearchQuerySet() 
SearchQuerySet().all() 
SearchQuerySet().filter(content='any_text') 

Tego rodzaju querys działa bez problemów, i powrócić pusty queryset jeśli nie znajdziemy niczego, albo zwraca queryset jeśli znajdzie coś. Otrzymuję błąd i problem podczas próby użycia tych poleceń w moim widoku i zwrócenia wyniku do szablonu. W powłoce wszystko działa normalnie, jeśli indeks jest pusty powrót pusty queryset, jeśli indeks ma wartość powrotu wartości to musi powrócić

search_indexes.py

import datetime 
from haystack import indexes 
from django.contrib.auth.models import User 
from cms.models import CMSPlugin, Page 

class CMSPluginIndex(indexes.SearchIndex, indexes.Indexable): 
    text = indexes.CharField(document=True, use_template=True) 
    plugin_type = indexes.CharField(model_attr='plugin_type') 
    language = indexes.CharField(model_attr='language') 

    def get_model(self): 
     return CMSPlugin 

    def index_queryset(self, using=None): 
     """Used when the entire index for model is updated.""" 
     return self.get_model().objects.all() 

cms_plugin_text.txt

{{object.language}} # I added just this field to make sure is not the content of this 

CV widoków.py

def search_query(request):  
    sqs = SearchQuerySet().all() 
    return HttpResponse(sqs) 

Django Error

Invalid JSON returned from ES: <Response [404]> 
Exception Value: Invalid JSON returned from ES: <Response [404]> 

Pełna ElasticSearch ślad błędu w konsoli

[DEBUG][action.search.type] [Futurist] [haystack][2], node[inisR695RtGZ_WnEnkRr1w], [P], s[STARTED]: Failed to execute [[email protected]] lastShard [true] 
     org.elasticsearch.search.SearchParseException: [haystack][2]: from[-1],size[-1]: Parse Failure [Failed to parse source [{"\ud900\udc71\ud840\udc65y\u0000\ud840\udc61": 
    {"\uda00\udc66\ud8c0\udc6c\ud840\udc65\ud8c0\udc65\ud8c0\udc00a\uda00\udc42\udac0\udc65": 
    {"\uda00\udc66\ud8c0\udc6c\ud840\udc65\u0000\ud880\udc25\udbc0\udc20": 
    {"\ud800\udc66\ud900\udc75\uda00\udc72\u0000\ud880\udc25\ud8c0\udc20": 
    {"\ud900\udc71\ud840\udc65y\u0000\ud840\udc61": 
    {"\ud900\udc71\ud840\udc65\udb80\udc79\ud8c0\udc73\uda00\udc72\ud980\udc6e\u0000\u0000\uda00 
    \udc64\ud8c0\udc73\udb40\udc61\ud900\udc63": {"\ud900\udc71\ud840\udc65y\u0000\ud840\udc61": 
    "\uda40\udc64\udb40\udc61\udb80\udc67\ud880\udc5f\uda40\udc74\ud880\udc28\ud880\udc6d\ud880\ 
    udc2e\ud880\udc6d\udac0\udc70\ud980\udc75\udb40\udc69\udb80\udc20\udbc0\udc52\ud840\udc70\ud 
    b40\udc6f\uda80\udc6f\udac0\udc61\ud880\udc5f\ud800\udc68\ud900\udc72\udb40\udc64\udb80\udc6 
    3\udb40\udc75\ud840\udc74\uda00\udc79\ud880\udc00\u0000\u0002\u0000\uda34\ude80\u7f8eD\u0000 
    \udbbf\udfff\udbbf\udfff\u0000\ud917\udc22\udbcc\udc38\ud899\udc75\ud917\udc36\udbcc\udc39\u 
    d899\udc75\ud917\udc35\udbcc\udc61\ud899\udc75\ud917\udc32\udbcc\udc30\ud9d9\udc75\ud917\udc 
    30\ud90c\ude63\ud9d9\udc75"}}, 
    "\ud880\udc5f\ud880\udc61\ud900\udc68\u0000\udb80\udc70\udb40\udc69": true}}, 
    "\ud900\udc71\ud840\udc65y\u0000\ud840\udc61": 
    {"\ud900\udc71\ud840\udc65\udb80\udc79\ud8c0\udc73\uda00\udc72\ud980\udc6e\u0000\u0000\uda00 
    \udc64\ud8c0\udc73\udb40\udc61\ud900\udc63": {"\ud900\udc71\ud840\udc65y\u0000\ud840\udc61": 
    "\ud900\udc28)\ud89d\udc30", 
    "\ud900\udc64\ud800\udc66\udac0\udc75\udb80\udc74\udbc0\udc6f\ud840\udc65\ud8c0\udc61\ud840\ 
    udc6f\u0000\ud99b\udf6c\udb40\udc61\udac0\udc61\uda40\udc79\udb80\udc65\uda00\udc77\ud8c0\ud 
    c6c": "\udb40\udc41D\ud8c0\udc67", 
    "\ud900\udc64\ud800\udc66\udac0\udc75\udb80\udc74\uda00\udc66\udac0\udc65d\u0000\u0001\u0000 
    \uda18\ude40\u7f8e\u0001": "\ud900\udc74\ud8c0\udc78\udbc0\udc00\udb00\udc65", 
    "\ud900\udc61\udb80\udc74\ud980\udc5f\udb40\udc65\ud840\udc65\ud8c0\udc61\udb80\udc65\ud9c0\ 
    udc70\ud800\udc72\ud900\udc73\ud800\udc5f\ud900\udc75\uda00\udc72\ud880\udc65\ud8c0\udc00\u7 
    36c\u0000\u0000\udba4\udc30\u7f8e\udbbf\udffe\udbbf\udfff\u0001\u0000\u0001\u0000\uda38\ude8 
    0\u7f8e": true, 
    "\udb40\udc61\udac0\udc61\uda40\udc79\udb80\udc65\uda00\udc77\ud8c0\udc6c\ud800\udc63\ud8c0\ 
    udc72\ud880\udc00\u7f8e\b\u0000\uda34\ude80\u7f8e\u0003\u0000": true}}}}, 
    "\ud840\udc66\udb00\udc6f\ud840\udc00\u7f8e": 0, "\uda00\udc73\ud900\udc7a\u0000\u0000": 
    20}]] 

at org.elasticsearch.search.SearchService.parseSource(SearchService.java:634) 
    at org.elasticsearch.search.SearchService.createContext(SearchService.java:507) 
    at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:480) 
    at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:252) 
    at org.elasticsearch.search.action.SearchServiceTransportAction.sendExecuteQuery(SearchServiceTransportAction.java:202) 
    at org.elasticsearch.action.search.type.TransportSearchQueryThenFetchAction$AsyncAction.sendExecuteFirstPhase(TransportSearchQueryThenFetchAction.java:80) 
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:216) 
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.performFirstPhase(TransportSearchTypeAction.java:203) 
    at org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$2.run(TransportSearchTypeAction.java:186) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: org.elasticsearch.search.SearchParseException: [haystack][3]: from[-1],size[-1]: Parse Failure [No parser for element [y]] 
    at org.elasticsearch.search.SearchService.parseSource(SearchService.java:620) 
    ... 11 more 

Jeśli potrzebujesz innych informacji, aby dowiedzieć się, co dzieje się tutaj, don” pytam cię, a ja to opublikuję.

Myślę, że może problem pochodzi z pyelasticsearch. Ktoś ma jakiś problem podobny do tego?

EDIT

Próbowałem coś innego, zainstalowałem ElasticSearch w serwerze Ubuntu i dokonać querys z CentOS do Ubuntu. Indeksuję model CMSPlugin z django-cms i wygląda na to, że treść/tekst wtyczek zawiera pewne znaki specjalne, a Java lub Elasticsearch nie próbują analizować. Jest to pierwszy ciąg, który powoduje, że ElasticSearch/Java ulega awarii \ud900\udc71\ud840\udc65y\u0000\ud900\udc74.

Próbowałem to w konsoli Pythona

c=u'\ud900\udc71\ud840\udc65y\u0000\ud900\udc74' 
print c 

wyjściowa: y

EDIT 2

Zastanawiam się, czy może Java na CentOS jest o jakiś problem, mam próbowałem zmienić wersję Java na 1.6 i nie działało

E DIT 3

W tej chwili pracuję bezpośrednio z ElasticSearch, dzięki czemu kwerendy używają urllib2 do elastycznego wyszukiwania, unikając pracy z Haystack. ElasticSearch odpowie na pytania idealne (muszę zarządzać JSON). Przypuszczam, że problem jest jak Stóg generuje lub analizowanie querys, bo gdy próbuję użyć SearchQuerySet() i zrobić coś jak SearchQuerySet().filter(content='whatever') stosując powłokę lub w widoku, ElasticSearch wywala się z błędem powyżej, ale działa dobrze, gdy robi CURL

EDYTOWANIE 4

Wreszcie pracuję bezpośrednio z ostatnim ElasticSearch bez użycia stogu siana. Wydaje się, że problemem jest to, w jaki sposób Haystack/pyelasticsearch formatuje zapytania wysyłane do ES, które nie mogą parsować kodowania i zawodzą w każdym żądaniu.

Nie znalazłem żadnego rozwiązania, tylko unikam pracy z Haystack, jeśli ktokolwiek może wskazać, że rozwiązanie byłoby świetne, wysyłam również e-mail do osób z Haystack, aby sprawdzić, czy już zauważyli ten problem .

EDIT 5

Jeśli ktoś ustawił Haystack na CentOS Uprzejmie jakiejkolwiek instrukcji o konfiguracji i wersji oprogramowania.Mam oprogramowanie ElasticSearch działające na CentOS, ale zarządzam zapytaniami bezpośrednio przez ElasticSearch, całkowicie ignorując Haystack

Odpowiedz

1

Uważam, że problem tutaj może być spowodowany zastosowaniem analizy pyelastic. Z nowszym stosem django (chyba> 1.0) musisz użyć elasticsearch-py. Jeśli spróbujesz pip install elasticsearch, powinieneś zainstalować najnowszą bibliotekę (1.1.1) i rozwiązać problem. Jako dodatkowy "tylko w przypadku" środek, możesz spróbować usunąć pyelasticsearch z pip uninstall pyelasticsearch. Ta zależność jest pokazana w bardzo nieoczywistej notatce, tutaj: http://django-haystack.readthedocs.org/en/latest/installing_search_engines.html#elasticsearch

+0

Dzięki za informację, ale już zmieniłem wersję pyelasticsearch i mam również pakiet elasticsearch, ale nie działał ani – AlvaroAV