1

我们正在使用 Endeca 来获取记录,因为它们的数量很大。我们在前端有一个数据表,它显示通过 Endeca 查询从 Endeca 获取的记录。现在,当我们根据前端的复选框值过滤结果时,查询会附加 Nrs 属性并获取过滤后的结果。对于任何中文、俄文或特殊字符,我们对其进行编码并创建查询。例子:

N=0&Ntk=全部&Ntx=mode+matchall&Ntt= rumtek &Nrs=collection()/record[(customerName="%22RUMTEK%22+LTD.")]&No=0&Ns= ,Endeca.stratify(collection()/record[not% 20(发票日期)])||发票日期|1|| ,Endeca.stratify(collection()/record[not%20(invoiceNumber)])||invoiceNumber|1

在上面的查询中,结果是根据值“rumtek”获取的,我们通过将值指定为“”RUMTEK“LTD.”来应用过滤器。编码后,过滤器值转换为“%22RUMTEK%22+LTD.”。此查询未获取任何结果。

当我们给出完整的编码术语(就像我们给出编码值的任何中文单词)或任何英文单词时,都会获取结果。给出包含双引号 (") 的术语时不会获取结果,例如 "ABC" LTD. 或 AB&C (AB%26C)。

另一个问题是:- 如果我们将 AB 设为停用词(不会被搜索的词)会怎样。如果我们搜索 AB&C,那么它会搜索 AB&C 的结果还是将整个术语作为停用词。

任何建议将不胜感激。

提前致谢。

4

1 回答 1

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

现在,它还没有准备好。您需要对整个 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

这应该可以为您提供所需的东西,而无需求助于通配符查询。

于 2015-02-11T06:30:33.050 回答