是否可以形成一个 Endeca 查询来检索必须以某些字母开头的字段?比如说让所有用户的第一个字母是A
?我检查了范围过滤器,但它只支持数字字段以及通配符搜索。但到目前为止,没有什么效果很好。
3 回答
正如Paul Lemke所提到的,创建维度是解决问题的一种方法。通配符不是一种选择,因为性能开销以及不相关的记录。但是我们使用其他几个替代方案解决了这个问题。
- 为对象创建一个名为“StartWith”的新属性,存储对象的第一个字母并使其可搜索。我们发现它比创建维度更容易。
有一个问题,像“A”这样的字母在 Endeca 中通常是停用词。我们可以做一些工作来解决这个问题。
- 获取第一个字母的 ASCII 值并将数值存储到该属性中。这种方法的另一个优点是我们可以使用范围过滤器。但是您不能搜索“AB”类型的要求。
- 预先添加一些字符,例如 ^^^My name 并搜索 ^^^M。这种方法的优点是您可以搜索以 AB 开头的字母等条件。
Endeca 当前版本 (6.1) 没有像其他编程语言中的“startswith”功能一样工作的搜索过滤器。
我确实有两个可能会让你接近的选择:
如果您真的只是在寻找第一个字母,您可以为字母表的每个字母(A、B、C ...)设置一个维度值。然后,您可以细化每个字母并仅查看以字母 A、B、C 等开头的值。唯一的缺点是您只能根据设置的维度值进行过滤。因此,如果您添加了“A”,则无法过滤以“AB”开头的任何内容。您可以继续添加“AB”、“BA”、“CA”等等,但这会很快变得笨拙。
如果您想要更接近“startswith”功能的东西,唯一的其他选择是使用通配符搜索。基本上你会像这样进行属性搜索:
N=0&Ntk=Username&Ntt=ab*
通配符搜索的诀窍是它会在该属性中的多个单词中执行此操作。因此,假设您有这些值的数据集:
- 史密瑟斯史密斯
- 拉里·史密斯
- 珍娜-史密斯
搜索
sm*
实际上会返回所有 3 个结果,因为“sm”在他们的姓中。即使是带有破折号的那个也会像 Endeca 认为的那样返回,这是一个单独的词。(虽然不确定,但可能会关闭它)。所以基本上它归结为:在属性中添加一个单词,将该属性设置为允许通配符搜索,然后对该属性执行“blah*”,您应该会得到您正在寻找的结果。
您是否尝试过第一个相关性排名模块,该模块应该根据与字段开头的接近程度进行排名?
这听起来与您正在寻找的内容相似,并且与通配符一起可能会产生您想要的结果。