4

我正在尝试 python Solr 接口 Sunburnt ,我遇到了一个我似乎无法弄清楚的小问题。在我的搜索字段中,我想接受我放入数组中的任意数量的单词(例如“Music 'Iron Maiden'”-> ['Music', 'Iron Maiden']。我已经想通了(使用shlex)。

问题是 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

你能遍历你的数组并构造查询表达式吗?

通常类似于

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 回答
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 回答