可以通过使用带有正则表达式查询的Boost Query (bq)来实现。例如,在我的应用程序中,我通过添加bq参数来提高exactName或exactSynonym以查询字符串开头的匹配项的优先级。
bq:(exactname:/<your_lucene_escaped_query_string_here>.*/) OR (exactSynonyms:/<your_lucene_escaped_query_string_here>.*/)
这是我如何转义Lucene特殊字符的方法:
escapeLucene: function (value, addQuotes) {
if (typeof(value) == "object") {
value = value.join("");
}
var specials = ['+', '-', '&', '!', '(', ')', '{', '}', '[', ']', '^', '"', '~', '*', '?', ' ', ':', ';', '\\', '/', '|'];
var regexp = new RegExp("(\\" + specials.join("|\\") + ")", "g");
var escapedVal = value.replace(regexp, "\\$1");
if (escapedVal.indexOf('\\') > -1 && addQuotes) {
escapedVal = "\"" + escapedVal + "\"";
}
return escapedVal;
}