4

私は Python Solr インターフェイス Sunburnt を試していますが、理解できないような小さな問題に遭遇しました。私の検索フィールドから、配列に入れた任意の数の単語を受け入れたいと思います (例: "Music 'Iron Maiden'" -> ['Music', 'Iron Maiden'])。シュレックス)。

問題は、ORing 用語の Sunburnt 構文が

    response = si.query(si.Q(tag = 'Music') | si.Q(tag = 'Iron Maiden'))

検索語リストを繰り返し処理して、上記のような結果になるにはどうすればよいですか? または、私が気付いていない他の方法がありますか?

4

3 に答える 3

6

あなたが本当にやりたいことはこれです:

query = si.query()

for word in words:
    query |= si.Q(word)

または、ワンライナーとして

query = reduce(operator.or_, [si.Q(word) for word in words])
于 2012-06-16T12:02:16.257 に答える
0

私はそれを考え出した!eval()関数が鍵でした:

words = shlex.split(request.args.get('q', ''))

qrystr=""
for word in words:
    qrystr = qrystr + "si.Q(title_s = '*" + word.replace("\0", "") + "*') | "
    # Each word needs to be stripped of null characters for the eval to work

qrystr = qrystr[:-2]; 


results = si.query(eval(qrystr))
finalresults = results.execute()    
于 2012-06-14T08:54:13.813 に答える
0

配列を繰り返し処理して、クエリ式を作成できますか?

一般的に似たようなもの

expr=""
for word in words:
    expr = expr + "si.Q(tag =" + word + ") |"

response = si.query(expr[:-1]); #to remove the dangling "|" character
于 2012-06-13T15:08:01.460 に答える