Sto cercando di eseguire una ricerca full-text su un db mongodb con il motore di ricerca elastico, ma ho riscontrato un problema: non importa quale termine di ricerca fornisco (o se uso query1 o query2), il motore restituisce sempre gli stessi risultati. Penso che il problema sia nel modo in cui faccio le richieste, ma non so come risolverlo.Interrogazione di ElasticSearch con Python Richieste che non funzionano bene
Ecco il codice:
def search(search_term):
query1 = {
"fuzzy" : {
"art_text" : {
"value" : search_term,
"boost" : 1.0,
"min_similarity" : 0.5,
"prefix_length" : 0
}
},
"filter": {
"range" : {
"published": {
"from" : "20130409T000000",
"to": "20130410T235959"
}
}
}
}
query2 = {
"match_phrase": { "art_text": search_term }
}
es_query = json.dumps(query1)
uri = 'http://localhost:9200/newsidx/_search'
r = requests.get(uri, params=es_query)
results = json.loads(r.text)
data = [res['_source']['api_id'] for res in results['hits']['hits'] ]
print "results: %d" % len(data)
pprint(data)
Proprio eyeballing in fretta ... Il vostro "fuzzy" bisogno clausola per essere avvolti all'interno di una "query"? Quindi la struttura diventerebbe "query": {"fuzzy": {...}}, "filtro": {...}. Puoi pubblicare il risultato che ottieni dalla tua richiesta in modo che possiamo provare e vedere se c'è qualcosa di ovvio. – Phil
La richiesta restituisce 10 elementi, indipendentemente dal tipo di search_term che fornisco. Non so cosa sto facendo male. – Rod0n
I dati sono restituiti reali? I documenti sono documenti validi o qualcos'altro? Hai provato una semplice ricerca uri che specifica il tipo di documento e i parametri di ricerca tutti in uno? Ad esempio: curl -XGET 'http: // localhost: 9200/newsidx/some_type/_search? Q = art_text: hello'. O forse qualcosa che cerca un tag che non è il tuo campo art_text. Sto solo cercando di aiutarti a restringere le cose – Phil