将Lucene的QueryParser集成到我的应用程序搜索中。 我有一个stringField,我也必须执行一些比较运算符。
例如:年龄> 3岁<4岁
但是我不能把字段设为Int.Because因为有时它可能有字符串值,如“NIL”,“Undefined”等。
所以无论如何都要将多个类型应用于同一个字段。或者可以将比较运算符应用于stringField本身吗? 请帮忙。
答案 0 :(得分:1)
使用范围查询:
它也适用于String类型。
参考:http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Range%20Searches
答案 1 :(得分:0)
[如果你真的需要该领域的原始值那么]
将原件保存在单独的Lucene字段中,例如“originalAge”。
P.S。看来你可以通过覆盖getFieldQuery来在一定程度上控制查询解析器。这样就可以将文本查询委托给文本字段,同时将数字查询保存到整数字段。 Scala示例:
val qp = new org.apache.lucene.queryparser.classic.QueryParser (Version.LUCENE_43, "age", ANALYZER_RUS) {
override def getFieldQuery (field: String, queryText: String, quoted: Boolean): org.apache.lucene.search.Query = {
println (s"getFieldQuery ($field, $queryText, $quoted)")
if (field == "age") {
if (queryText.matches ("^age(\\>|\\<)\\d+$")) super.getFieldQuery (field, queryText, quoted)
else super.getFieldQuery ("originalAge", queryText, quoted)
} else super.getFieldQuery (field, queryText, quoted)
}
}
println (qp.parse ("undefined")) // originalAge:undefined
println (qp.parse ("age>3")) // age:age age:3
您也可以查看flexible query parser。