Próbuję wykonać wyszukiwanie pełnotekstowe na mongodb db z wyszukiwarką Elastic Search, ale napotkałem na problem: nie ma znaczenia, jakie wyszukiwane hasło podaję (lub jeśli używam zapytania 1) lub zapytanie2), silnik zawsze zwraca te same wyniki. Myślę, że problem polega na tym, że zgłaszam prośby, ale nie wiem, jak je rozwiązać.Wywoływanie ElasticSearch z pytaniami w Pythonie Nie działa dobrze
Oto kod:
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)
Wystarczy eyeballing to szybko ... twoja "rozmyta" klauzula muszą być opakowane w środku "zapytania"? Tak więc struktura stanie się "zapytaniem": {"fuzzy": {...}}, "filter": {...}. Czy możesz przesłać wynik, który otrzymujesz ze swojej prośby, abyśmy mogli sprawdzić, czy jest coś oczywistego. – Phil
Żądanie zwraca 10 elementów, bez względu na to, co dostarczam search_term. Nie wiem, co robię źle. – Rod0n
Czy dane zwracane są prawdziwe? Czy dokumenty są ważnymi dokumentami, czy czymś innym? Czy wypróbowałeś proste wyszukiwanie URI, które określa typ dokumentu i parametry wyszukiwania w jednym? Na przykład: curl -XGET 'http: // localhost: 9200/newsidx/some_type/_search? Q = art_text: hello'. A może coś, co przeszukuje tag, który nie jest polem art_text. Po prostu staram się pomóc ci zawęzić sprawę – Phil