我使用PHP Zend Framework Search(基于Lucene)构建了一个搜索索引。搜索是买卖网站。
我的搜索索引包括以下字段:
item-id(UnIndexed)
item-title(Text)
item-description(UnStored)
item-tags(文字)
item-price(关键字)
卖方ID(UnIndexed)
卖方名称(文字)
我希望用户搜索索引,通过搜索项目或按名称搜索卖家来过滤搜索。
如果我使用Lucene的默认搜索设置进行搜索,我将搜索所有5个项目字段和卖家名称字段。这不是我想要发生的事情。我想要的是当用户进行搜索时我希望他们在搜索项目或卖家名称时从下拉菜单中进行选择。
如何在搜索要忽略卖家名称字段的项目时告诉搜索查询?当搜索卖家名称时,我怎么能告诉搜索查询不搜索任何项目字段?或者为卖家名称创建单独的索引是否更好?
答案 0 :(得分:6)
目前无法明确不搜索Lucene的查询语言或Zend_Search_Lucene
查询构建API中的字段。
但是,您可以明确列出 要在查询中搜索的字段。一个例子是:
seller-name: Joe McBob
如果使用此方法,则必须明确列出要查询的字段以及要在其中搜索的内容。因此,如果您还需要使用相同的文字搜索item-title
字段,则必须复制上述内容,但使用不同的字段名称。一个例子是:
seller-name: Joe McBob OR item-title: JoeMcBob
当然,您也可以通过Zend_Search_Lucene
提供的查询构建API来完成所有这些工作。 manual有一些很好的例子。
值得注意的是,正如您所发现的那样,Zend_Search_Lucene
默认会搜索所有字段。这是它与Java Lucene不同的方式之一。
但是,您可以使用setDefaultSearchField
类的Zend_Search_Lucene
静态方法设置要查询的默认字段。