Lucene-7.5.0
Lucene-7.5.0 copied to clipboard
请问大佬,如何将Lucene query string直接转为Query对象
我试了一下QueryPharser对象需要传入一个field域,但是我不知道我的string里面有什么域,可能有一个,也有可能有几个field,还有可能是组合起来的类似于 +fieldA:F +(+(((fieldB:cd)^300.0 (fieldC:sc)^200.0 (fieldD:china)^100.0 +(((fieldA:[1663210081 TO 1663814881])^300.0 (fieldA:[1662605281 TO 1663814881])^200.0)~1))~1) +(((fieldA:[1663210081 TO 1663814881])^300.0 (fieldA:[1662605281 TO 1663814881])^200.0)~1))
如何转为一个Query对象放入lucene中去查呢? 请指教,谢谢大佬🙏
你可以定义N个Query 然后用BooleanQuery封装这N个Query
感谢大佬回复,可能是我没有描述太清楚。 上面这个query string就是我用BooleanQuery层层嵌套其他类型的Query然后tostring()出来的 然后想把它再转回去,但是每次toString出来的不一定一样,想问一下有没有其他方法转回去
主要是我想传输这个String,到另一个服务上去解析为Query对象
主要是我想传输这个String,到另一个服务上去解析为Query对象
你这个需求 我不知道Lucene有没有对应的功能解决😅 没法帮到你哦
要不你发邮件[email protected]问问Lucene的其他维护者吧
不影响呀,那个只是默认的filed,如果你string里面有 fieldA:xx这种语法,它会把fieldA解析出来作为term(field, text)里面的filed
举个栗子, a && name:b 默认field为content 用QueryParser转回去时候 => +content:a +name:b => BooleanQuery MUST term query(content, a) MUST term query(name, b)。
不影响呀,那个只是默认的filed,如果你string里面有 fieldA:xx这种语法,它会把fieldA解析出来作为term(field, text)里面的filed
这个我了解,但是在复杂的嵌套语句中,比如BooleanQuery里面嵌套了BooleanQuery,BoostQuery,RangeQuery等,QueryParser解析的时候就会报错,这种时候我猜可能可以用不同的Analyzer,但是官方就只实现了一两种,好像不太行
我试了一下QueryPharser对象需要传入一个field域,但是我不知道我的string里面有什么域,可能有一个,也有可能有几个field,还有可能是组合起来的类似于 +fieldA:F +(+(((fieldB:cd)^300.0 (fieldC:sc)^200.0 (fieldD:china)^100.0 +(((fieldA:[1663210081 TO 1663814881])^300.0 (fieldA:[1662605281 TO 1663814881])^200.0)~1))~1) +(((fieldA:[1663210081 TO 1663814881])^300.0 (fieldA:[1662605281 TO 1663814881])^200.0)~1))
如何转为一个Query对象放入lucene中去查呢? 请指教,谢谢大佬🙏
我好像发现问题了,在上面这一串字符中,如果我把 ~1 这个去掉就可以解析出来,这个~1是BooleanQuery中
if (getMinimumNumberShouldMatch() > 0) {
buffer.append('~');
buffer.append(getMinimumNumberShouldMatch());
}
生成出来的,但是我的查询中又需要setMinimumNumberShouldMatch(1),感觉没啥好办法了