矢量搜索在XPages中无法正常工作

矢量搜索在XPages中无法正常工作,xpages,lotus-notes,xpages-ssjs,Xpages,Lotus Notes,Xpages Ssjs,我使用vectors在XPages中执行多列搜索功能。它工作正常,但效率不高。在筛选器列值属性中,我使用以下代码: try { var vtr:java.util.Vector = new java.util.Vector(); var t1 = sessionScope.searchfirstName; var t2 = sessionScope.searchlastname; var t3 = sessionScope.searchemail; var

我使用vectors在XPages中执行多列搜索功能。它工作正常,但效率不高。在筛选器列值属性中,我使用以下代码:

try {
    var vtr:java.util.Vector = new java.util.Vector();
    var t1 = sessionScope.searchfirstName;
    var t2 = sessionScope.searchlastname;
    var t3 = sessionScope.searchemail;
    var t4 = sessionScope.searchcountry;
    var t5 = sessionScope.searchcompany;

    @If(t1 !=null,vtr.addElement(t1),vtr.addElement(""));   
    @If(t2 !=null,vtr.addElement(t2),vtr.addElement(""));
    @If(t3 !=null,vtr.addElement(t3),vtr.addElement(""));
    @If(t4 !=null,vtr.addElement(t4),vtr.addElement(""));
    @If(t5 !=null,vtr.addElement(t5),vtr.addElement(""));

    return vtr;
} catch(e) {
}

当我执行搜索操作时,它将适用于某些值,而不是所有值。例如,如果我搜索“Raj”作为名字,它将显示结果,但如果我搜索“Yadav”作为姓氏,它将显示0结果。

我假设您使用向量搜索视图。在Notes中,视图搜索需要“升序填充”键(除此之外,所有列都需要排序)。因此,当向量中的第二个元素不为null时,第一个元素也不能为null。Notes将搜索第一个键,然后使用第二个键搜索结果,依此类推,直到该键为空。因此,当您仅使用第二个键进行搜索时,结果将为空。 这是Notes的核心功能,并非特定于XPages。您可以对视图使用带有字段名的ft搜索

更新
那你能做什么呢?以下代码在我脑海中消失了,因此您可能需要修复打字错误:

try {
    var vtr:java.util.Vector = new java.util.Vector();
    var t1 = sessionScope.searchfirstName;
    var t2 = sessionScope.searchlastname;
    var t3 = sessionScope.searchemail;
    var t4 = sessionScope.searchcountry;
    var t5 = sessionScope.searchcompany;

    var resultArray = [];
    if (t1) { resultArray.push("[FirstName] = " + t1); };
    if (t2) { resultArray.push("[LastName] = " + t2); };
    if (t3) { resultArray.push("[eMail] = " + t3); };
    if (t4) { resultArray.push("[Country] = " + t4); };
    if (t5) { resultArray.push("[Company] = " + t5); };

    return @Implode(resultArray, " AND ");

} catch(e) {
   print(e.message);
}
然后执行
NotesView.FTSearch(..)


此方法的优点:您的视图可以以任何方式排序,您可以搜索甚至未显示在视图中的字段。缺点:您需要一个FTIndex,这需要更多的工作,因为您不能将视图控件用于生成的DocumentCollection-您需要一个RepeatControl

是。所有列都是升序列。当我使用第二个、第三个或第四个键进行搜索时,有时会给出结果,但结果不正确。在这里,列的向上或向下排序并不重要。它们很重要。搜索要求向量的所有元素都是非空的。带有null的场景“Yadav”是不受支持的搜索-结果可以是任何内容。简而言之:Null不是有效的搜索键。谢谢你@stwissel。你是天才。我使用您的技术将键放入数组中,然后使用搜索属性在视图面板中获得所需的结果。再次感谢。vtr.addElement(t1?t1:“”)较短。但您需要保留ifs,以便根据视图列格式化键值——正如stwissel所解释的那样。