1

PythonでElasticSearchを使用するためにPyESを使用しています。通常、クエリは次の形式で作成します。

# Create connection to server.
conn = ES('127.0.0.1:9200')

# Create a filter to select documents with 'stuff' in the title.
myFilter = TermFilter("title", "stuff")

# Create query.
q = FilteredQuery(MatchAllQuery(), myFilter).search()

# Execute the query.
results = conn.search(query=q, indices=['my-index'])

print type(results)
# > <class 'pyes.es.ResultSet'>

そして、これは完璧に機能します。私の問題は、クエリがドキュメントの大きなリストを返すときに始まります。結果を辞書のリストに変換するのは計算量が多いので、すでに辞書にあるクエリ結果を返そうとしています。私はこのドキュメントに出くわしました:

http://pyes.readthedocs.org/en/latest/faq.html#id3 http://pyes.readthedocs.org/en/latest/references/pyes.es.html#pyes.es.ResultSet https:// github.com/aparo/pyes/blob/master/pyes/es.py(1304行目)

しかし、私は自分が何をすべきかを正確に理解することはできません。以前のリンクに基づいて、私はこれを試しました:

from pyes import *
from pyes.query import *
from pyes.es import ResultSet
from pyes.connection import connect

# Create connection to server.
c = connect(servers=['127.0.0.1:9200'])

# Create a filter to select documents with 'stuff' in the title.
myFilter = TermFilter("title", "stuff")

# Create query / Search object.
q = FilteredQuery(MatchAllQuery(), myFilter).search()

# (How to) create the model ?
mymodel = lambda x, y: y

# Execute the query.
# class pyes.es.ResultSet(connection, search, indices=None, doc_types=None,
# query_params=None, auto_fix_keys=False, auto_clean_highlight=False, model=None)

resSet = ResultSet(connection=c, search=q, indices=['my-index'], model=mymodel)
# > resSet = ResultSet(connection=c, search=q, indices=['my-index'], model=mymodel)
# > TypeError: __init__() got an unexpected keyword argument 'search'

ResultSetからdictを取得できた人はいますか?ResultSetを(リストの)辞書に効率的に変換するための適切な提案も高く評価されます。

4

2 に答える 2

1

ResultSet を dict に直接キャストする方法が多すぎましたが、何も得られませんでした。私が最近使用している最良の方法は、ResultSet 項目を別のリストまたは辞書に追加することです。ResultSet は、すべての項目を dict としてカバーします。

使用方法は次のとおりです。

#create a response dictionary
response = {"status_code": 200, "message": "Successful", "content": []}

#set restul set to content of response
response["content"] = [result for result in resultset]

#return a json object
return json.dumps(response)
于 2013-07-17T07:14:48.180 に答える
0

それほど複雑ではありません。結果セットを反復処理するだけです。たとえば、for ループの場合:

for item in results:
   print item
于 2013-07-12T07:08:49.060 に答える