我正在使用OpenSearchServer在网站上提供搜索功能。我想抓取网站上的所有页面以获取要关注的链接,但我想从索引中排除某些页面。我无法弄清楚如何做到这一点。
具体来说,该网站包含一个有自己的产品搜索的商店,我正在搜索产品和类别。产品页面包含http://www.thesite/p/123
等网址,因此我不想在搜索结果中包含任何此类网页。但是,某些产品页面会引用背景信息页面,我希望这些页面包含在搜索索引中。
我遇到的问题是过滤器对结果没有影响 - 它不会过滤掉/p/
和/c/
结果。如果我通过取消否定框来更改过滤器,则不会得到任何结果,因此它似乎是字段的内容或导致问题的过滤条件。
我尝试在查询>中将名为搜索的默认查询添加否定过滤器使用url:"http://www.thesite/p/*"
在索引上过滤选项卡
但似乎查询过滤器不支持通配符,尽管Crawler>支持它们。排除列表过滤器。
我尝试在Schema中添加一个名为urlField的新字段>使用使用Whitespace Tokenizer和正则表达式(http://www.thesite/(c|p)/
)配置的分析器对字段进行填充和填充。当我使用“测试”按钮时,它似乎为我的测试网址http://www.thesite/p/123
生成了两个令牌:
http://www.thesite/p/
p
我希望能够在查询中使用第一个>如果我需要在将来某个时间搜索产品页面,请过滤以排除所有商店结果,并可选择使用p(对于产品)或c(对于类别)。
架构中的urlShop字段设置如下:
Indexed: yes
Stored: no (because I don't need the field back, just want to be able to filter on it)
TermVector: No
Analyzer: urlShop
Copy of: url
我已将urlFilter:"http://www.thesite/p/"
添加到查询>勾选负框的过滤器。
当我使用默认渲染器时,这似乎对结果没有影响。
要查看它是否影响返回的结果,我取消了查询过滤器中的否定框,我在默认渲染器中没有得到任何结果。这让我相信urlShop字段没有被填充,但我不确定如何直接检查。
我想知道是否有更简单的方法可以做到这一点,但如果我的方法在OpenSearchServer的上下文中有意义,那么你能帮我辨别出什么是错的吗?
网站在IIS下运行,OpenSearchServer将在Tomcat中运行的同一台服务器上配置。
答案 0 :(得分:2)
最后想出来......
转到查询并点击已配置查询的编辑。然后转到过滤器选项卡。添加如下查询过滤器:
urlExact:"http://myurltoexclude*"
选中“否定”框。点击添加。
现在确保点击“保存在右侧的小小按钮。这是我错过的部分.URS仍然在数据库中并且抓取,但至少它们不会返回结果。” / p>