我们正在使用Endeca来获取记录,因为它们数量巨大。我们在前端有一个dataTable,显示从Endeca通过Endeca查询获取的记录。 现在,当我们根据前端的复选框值过滤结果时,查询会附加Nrs属性并获取过滤结果。对于任何中文或俄文或特殊字符,我们对它们进行编码并创建查询。例如:
N = 0&安培; NTK =所有&安培; N tx个=模式+ matchall&安培; NTT = 隆德&安培; NRS =集合()/记录[(客户名称= “%22RUMTEK%22 + LTD”) ]&安培;否= 0&安培; NS个= ,Endeca.stratify(集合()/记录[不%20(invoiceDate)])|| invoiceDate | 1 || ,Endeca.stratify(集合() /记录[不%20(invoiceNumber)])|| invoiceNumber | 1
在上面的查询中,结果是根据值“rumtek”获取的,我们通过赋值“RUMTEK”LTD来应用过滤器。编码后,将滤波器值转换为“%22RUMTEK%22 + LTD。”。此查询不会获取任何结果。
当我们给出完整的编码术语(比如我们给出编码值的任何中文单词)或任何英文单词时,都会获取结果。当给出包含双引号(“)”的术语“ABC”LTD。或AB& C(AB%26C)时,不会获取结果。
还有一个问题是: - 如果我们将AB作为停用词(不会被搜索的词),该怎么办?如果我们搜索AB& C,那么它会搜索AB& C的结果,否则它将整个术语作为停用词。
任何建议都将受到赞赏。
先谢谢。
答案 0 :(得分:0)
首先,您需要确保您的Nrs参数完全正确地进行URL编码。其次,你需要确保正确地逃避双引号,因为你想要与它们匹配。
正如您所说,您的数据包含一些其customerName属性为(无括号)的记录[" RUMTEK" LTD。]。根据MDEX开发指南,要使用双引号作为文字值,您需要通过在双引号字符前加上它来解除它(多么令人困惑!)。因此,为了与此匹配,您需要具有类似的查询字符串(为了便于阅读而分隔为行):
N=0&
Ntk=All&
Ntx=mode+matchall&
Ntt=rumtek&
Nrs=collection()/record[(customerName="""RUMTEK"" LTD.")]&
&No=0&
Ns=,Endeca.stratify(collection()/record[not%20(invoiceDate)])||invoiceDate|1||,Endeca.stratify(collection()/record[not%20(invoiceNumber)])||invoiceNumber|1
现在,它还没有准备好。您需要对ENTIRE Nrs参数值进行URL编码。所以它会变成:
N=0&
Ntk=All&
Ntx=mode+matchall&
Ntt=rumtek&
Nrs=collection%28%29%2Frecord%5B%28customerName%3D%22%22%22RUMTEK%22%22+LTD.%22%29%5D&
&No=0&
Ns=,Endeca.stratify(collection()/record[not%20(invoiceDate)])||invoiceDate|1||,Endeca.stratify(collection()/record[not%20(invoiceNumber)])||invoiceNumber|1
这应该可以为您提供所需而无需借助通配符查询。