我正在尝试python Solr界面Sunburnt,我遇到了一个我似乎无法弄清楚的问题。从我的搜索领域,我想接受任意数量的单词,我把它放在一个数组中(例如“Music'Iron Maiden'” - > ['Music','Iron Maiden']。我已经想到了(使用shlex)。
问题是ORing术语的Sunburnt语法是
response = si.query(si.Q(tag = 'Music') | si.Q(tag = 'Iron Maiden'))
如何迭代我的搜索字列表并最终得到类似上面的内容?或者还有其他方法可以做到我不知道吗?
答案 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()