I risultati restituiti dal pagliaio, utilizzando un backend elasticsearch, mi sembrano errati. Il mio indice di ricerca è la seguente:Non capisco i risultati restituiti da elasticsearch/haystack
from haystack import indexes
from .models import IosVideo
class VideoIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
title = indexes.CharField(model_attr='title')
absolute_url = indexes.CharField(model_attr='get_absolute_url')
# content_auto = indexes.EdgeNgramField(model_attr='title')
description = indexes.CharField(model_attr='description')
# thumbnail = indexes.CharField(model_attr='thumbnail_url', null=True)
def get_model(self):
return IosVideo
def index_queryset(self, using=None):
return self.get_model().objects.filter(private=False)
mio documento di testo si presenta come:
{{ object.title }}
{{ object.text }}
{{ object.description }}
La mia domanda è
SearchQuerySet().models(IosVideo).filter(content="darby")[0]
Il risultato che è il ritorno che mi fa pensare questo non funziona è un oggetto video con le seguenti caratteristiche
title: u'Cindy Daniels'
description: u'',
text: u'Cindy Daniels\n\n\n',
absolute_url: u'/videos/testimonial/cindy-daniels/'
Perché nel mondo la query restituisce un risultato del genere? Sono molto confuso.
La mia teoria corrente è che esso rende token ogni sottoinsieme del carattere nella query e lo utilizza come corrispondenza parziale. C'è un modo per ridurre questa tolleranza per essere più vicini.
mie info pip è elasticsearch == 1.2.0 django-pagliaio == 2.3.1
E il numero di versione è 1.3.1 elasticsearch
Inoltre quando ho colpito il server locale con http://localhost:9200/haystack/_search/?q=darby&pretty
Restituisce 10 risultati.
SearchQuerySet().filter(content="darby")
Restituisce 4 risultati.
Qualcuno sa cosa potrebbe causare questo tipo di comportamento?
Sei, per caso, utilizzando elasticstack o un analizzatore personalizzato? Questo potrebbe spiegare i risultati che stai vedendo. Sono sicuro che tu abbia visto, ma la ricerca di default nel filtro di Haystack 2.X è 'contains', piuttosto che' exact'. Questo, oltre a un analizzatore che analizza le parole parziali, potrebbe potenzialmente corrispondere a quel documento. –
Nessun analizzatore personalizzato :(il mio pip è simile a questo elasticsearch == 1.2, django-haystack == 2.3.1 La versione elasticsearch è 1.3.1 – user2734679
Hai provato a interrogare elasticsearch per confrontare i risultati? Ad esempio 'http:// localhost: 9200/_search /? q = darby' dove 'search' è il tuo nome indice –