首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Sunburnt+Solr创建动态调整大小的OR查询

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

Stack Overflow用户
提问于 2012-06-13 22:25:36
回答 3查看 543关注 0票数 4

我正在尝试python Solr接口Sunburnt,我遇到了一个我似乎无法解决的小问题。从我的搜索字段中,我想要接受放入数组中的任意数量的单词(例如“音乐‘铁姑娘’”->‘音乐’,‘铁姑娘’。这一点我已经弄清楚了(使用shlex)。

问题是ORing术语的Sunburnt语法是

代码语言:javascript
复制
    response = si.query(si.Q(tag = 'Music') | si.Q(tag = 'Iron Maiden'))

我如何迭代我的搜索词列表,并最终得到类似上面的结果?或者有没有其他我不知道的方法呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-16 20:02:16

你真正想做的是:

代码语言:javascript
复制
query = si.query()

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

或者,作为一行程序

代码语言:javascript
复制
query = reduce(operator.or_, [si.Q(word) for word in words])
票数 6
EN

Stack Overflow用户

发布于 2012-06-13 23:08:01

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

一般而言,类似于

代码语言:javascript
复制
expr=""
for word in words:
    expr = expr + "si.Q(tag =" + word + ") |"

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

Stack Overflow用户

发布于 2012-06-14 16:54:14

我想通了!eval()函数是关键:

代码语言:javascript
复制
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()    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11016994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档