如何使用Zend Search(Lucene)排除搜索指定字段

4

我使用PHP Zend Framework Search(基于Lucene)构建了一个搜索索引。这个搜索是为一个买卖网站设计的。

我的搜索索引包括以下字段:

item-id(未索引)
item-title(文本)
item-description(未存储)
item-tags(文本)
item-price(关键词)
seller-id(未索引)
seller-name(文本)

我希望用户可以根据物品或销售者姓名进行过滤搜索。

如果我使用Lucene的默认搜索设置,我将搜索所有5个物品字段和销售者名称字段。这不是我想要发生的事情。当用户进行搜索时,我希望他们必须从下拉菜单中选择搜索物品还是销售者姓名。

当搜索物品时,如何告诉搜索查询忽略销售者名称字段?当搜索销售者姓名时,如何告诉搜索查询不要跨任何物品字段进行搜索?还是最好为销售者姓名创建一个单独的索引?

1个回答

6

目前在Lucene的查询语言或Zend_Search_Lucene查询构建API中没有明确不搜索字段的方法。

但是,您可以在查询中明确列出要搜索的字段。例如:

seller-name: Joe McBob

如果采用这种方法,您需要明确列出要查询的字段以及要在其中搜索的内容。因此,如果您还需要使用相同的文本搜索item-title字段,则必须重复上述过程,但使用不同的字段名称。例如:
seller-name: Joe McBob OR item-title: JoeMcBob

当然,您也可以通过 Zend_Search_Lucene 提供的查询构建 API 来完成所有这些操作。手册 中有一些很好的示例。

这里值得注意的一件事是,正如您发现的那样,默认情况下,Zend_Search_Lucene 将搜索所有字段。这是它与 Java Lucene 不同的方式之一。 但是,您可以使用 Zend_Search_Lucene 类的 setDefaultSearchField 静态方法设置默认要查询的字段。


谢谢Jason。我想这可能是我必须要做的。我想再次确认这里的知识库,看看是否有更好的解决方案,你已经满足了我的问题! - justinl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接