使用Sunburnt + Solr创建动态大小的OR查询

时间:2012-06-13 14:25:36

标签: python solr sunburnt

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

问题是ORing术语的Sunburnt语法是

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

如何迭代我的搜索字列表并最终得到类似上面的内容?或者还有其他方法可以做到我不知道吗?

3 个答案:

答案 0 :(得分:6)

你真正想做的是:

query = si.query()

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

或作为单行

query = reduce(operator.or_, [si.Q(word) for word in words])

答案 1 :(得分:0)

你可以迭代你的数组并构造查询表达式吗?

通常类似于

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

response = si.query(expr[:-1]); #to remove the dangling "|" character

答案 2 :(得分: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()