【发布时间】:2014-03-20 17:18:27
【问题描述】:
我有一个可以通过 SolR 上的 url 查询执行搜索的 web 应用程序。
结果作为 Document 对象接收。
我的查询看起来像:q=Book:Harlan AND Book:Coben AND ..,它工作正常。
String[] word = searchedWord.trim().split(" ");
for (int i = 0; i < word.length; i++) {
if (!StringUtils.isEmpty(word[i])) {
if (i > 0) {
query.append("%20AND%20");
}
String utf_encoded = URLEncoder.encode(StringEscapeUtils.escapeJava(word[i]), "UTF-8");
}
}
但我需要强制执行搜索字词的类型,因为当搜索字词类似于精确字词时:"Harlan Coben",此代码将其分成两个字 "Harlan 和 Coben"
例如,我的 webapp 应该能够搜索:
确切的术语:"Harlan Coben"
多个词:shakespeare harlan coben
多个混合词:shakespeare "harlan coben" coben or shakespear "harlan coben" or "harlan coben" coben
调用 SolR 的 URL 以 UTF-8 编码以替换特殊字符..
我应该如何进行?通过正则表达式?还是有其他方法?
----- 编辑--------
更具体地说,所有这些字符都可以是 "@(!ùéàç" 或 chinese/russian 或任何其他字符(unicode?)一种特定的语言。
我需要匹配它们并将它们分开以准备 SolR 查询。
示例:
如果搜索词是:coben "Harlan Coben" s(554603)hakesdpeare Straße Привет
我的正则表达式应该匹配并给我这个结果:
coben
"Harlan Coben"
s(554603)hakesdpeare
Straße
Привет
然后我需要将它们中的每一个与AND Book: 或juste Book: 连接起来以进行如下查询:
q=Book:coben AND Book:"Harlan Coben" AND Book:s(554603)hakesdpeare AND Book:Straße AND Book:Привет
我从@fge 尝试了("[a-z]+(?:\s+[a-z]+)+"|[a-z]+)(?:\s+|$)(谢谢),但它只与[a-z] 匹配,我用\\p{all} 尝试了这个但没有用..
有什么想法吗?
-----结束编辑--------
感谢您的帮助!
【问题讨论】:
-
那么如果包含空格的搜索字符串用双引号括起来,你不希望它被拆分?
-
是的,我需要保留确切的术语,例如“harlan coben”,而不是两个不同的术语