当我们在 url 中给出编码值和英文字符时,Endeca 查询中的 Nrs 不获取结果

Nrs in Endeca query is not fetching results when we give encoded value along with English character in url

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

N=0&Ntk=All&Ntx=mode+matchall&Ntt=rumtek&Nrs=collection()/record[(customerName="%22RUMTEK%22+LTD.")]&No= 0&Ns=,Endeca.stratify(collection()/record[not%20(invoiceDate)])||invoiceDate|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 的结果还是将整个词条作为停用词。

如有任何建议,我们将不胜感激。

提前致谢。

首先,您需要确保您的 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

现在,它还没有准备好。您需要 URL 对整个 Nrs 参数值进行编码。所以它会变成:

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

这应该可以满足您的需求,而无需求助于通配符查询。