【发布时间】:2016-05-11 20:21:52
【问题描述】:
我想查询多个候选人,以查找可能类似于 “My sear foo” 的搜索字符串。 现在我想查找具有包含一个(或多个)输入字符串(被空格分隔)的字段的文档。
我找到了一些代码,可以让我按模式进行搜索:
@View(name = "find_by_serial_pattern", map = "function(doc) { var i; if(doc.serialNumber) { for(i=0; i < doc.serialNumber.length; i+=1) { emit(doc.serialNumber.slice(i), doc);}}}")
public List<DeviceEntityCouch> findBySerialPattern(String serialNumber) {
String trim = serialNumber.trim();
if (StringUtils.isEmpty(trim)) {
return new ArrayList<>();
}
ViewQuery viewQuery = createQuery("find_by_serial_pattern").startKey(trim).endKey(trim + "\u9999");
return db.queryView(viewQuery, DeviceEntityCouch.class);
}
这对于寻找一种模式非常有效。但是我如何修改我的代码以在 doc.serialNumber 上获得多个包含?
编辑: 这是当前的解决方法,但我猜必须有更好的方法。 也只有 OR 逻辑。因此,条目适合 term1 或 term2 在列表中。
@View(name = "find_by_serial_pattern", map = "function(doc) { var i; if(doc.serialNumber) { for(i=0; i < doc.serialNumber.length; i+=1) { emit(doc.serialNumber.slice(i), doc);}}}")
public List<DeviceEntityCouch> findBySerialPattern(String serialNumber) {
String trim = serialNumber.trim();
if (StringUtils.isEmpty(trim)) {
return new ArrayList<>();
}
String[] split = trim.split(" ");
List<DeviceEntityCouch> list = new ArrayList<>();
for (String s : split) {
ViewQuery viewQuery = createQuery("find_by_serial_pattern").startKey(s).endKey(s + "\u9999");
list.addAll(db.queryView(viewQuery, DeviceEntityCouch.class));
}
return list;
}
【问题讨论】:
标签: java search couchdb ektorp