Λύθηκε: λάβετε τη λίστα όλων των εγγράφων στο django-elasticsearch-dsl

Το κύριο πρόβλημα είναι ότι το Elasticsearch δεν διαθέτει έναν εγγενή τρόπο λήψης μιας λίστας όλων των εγγράφων σε ένα δεδομένο ευρετήριο. Μπορείτε να χρησιμοποιήσετε το API αναζήτησης, αλλά αυτό θα επιστρέψει μόνο ένα έγγραφο κάθε φορά.

Χρησιμοποιώ το django-elasticsearch-dsl και θέλω να λάβω λίστα με όλα τα έγγραφα στο ευρετήριο. Πως μπορώ να το κάνω αυτό?

A:

Μπορείτε να χρησιμοποιήσετε το Search αντικείμενο από django_elasticsearch_dsl. Είναι μια υποκατηγορία του ElasticsearchDSL Αναζήτηση αντικειμένου, ώστε να μπορείτε να χρησιμοποιήσετε όλες τις μεθόδους και από εκεί. Τα έγγραφα για αυτό είναι εδώ: https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html#the-search-object

Λήψη όλων των εγγράφων

<code>from django_elasticsearch_dsl import Search, Index

s = Search(index='blog')
.query('match', title='python')

response = s.execute()

for hit in response: # iterate over hits from response object
print(hit) # print each hit as a dict (default)

for hit in s: # iterate over hits from search query directly
print(hit) # print each hit as a dict (default)

for hit in s[0:10]: # slice results to get only first 10 hits
print(hit) # print each hit as a dict (default)

len(s) # number of total hits found by query (slow!) &lt;--- this is what you want! &lt;--- this is what you want! &lt;--- this is what you want! &lt;--- this is what you want! &lt;--- this is what you want! len(response) # number of total hits found by query (slow!) &lt;--- this is what you want! &lt;--- this is what you want! &lt;--- this is what you want! &lt;--- this is what you want! list(s)[0] # first result as a Python dictionary list(response)[0] # first result as a Python dictionary response[0] # first result as an ElasticSearch Hit response[0].meta # metadata associated with the Hit response[0].meta.score # score associated with the Hit response[0].title # title field value list(response)[1]['title'] ## second result's 'title' field value<;/pre>;<;br />;>;br />;The above code will return all documents matching your query, but it will not return any fields other than _id and _type unless they are explicitly requested via source(). To retrieve more fields, use source():<;br />;from django_elasticsearch_dsl import Search, Index, F ;from elasticsearch_dsl import Q ;import json ;import pprint ;pp = pprint.PrettyPrinter();pprint = pp.pprint ;s = Search().query('match', title='python').source([ 'title', 'body' ]) ;for i in range((len(s))): pprint((json.loads((str)(s[i]).replace("'", """)))) ;## or simply do it like below :## [{'body': 'Python and Django go together like peanut butter and jelly.'

Related posts:

Leave a Comment