2

我正在使用 OpenSearchServer 在网站上提供搜索功能。我想抓取网站上的所有页面以获取链接,但我想从索引中排除一些页面。我不知道该怎么做。

具体来说,该网站包括一家拥有自己的产品搜索的商店,我一直在搜索产品和类别。产品页面有这样的 URL,http://www.thesite/p/123所以我不想在搜索结果中包含任何这样的页面。然而,一些产品页面引用了背景信息页面,我希望这些页面包含在搜索索引中。

我遇到的问题是过滤器对结果没有影响 - 它不会过滤掉/p/and/c/结果。如果我通过取消勾选否定框来更改过滤器,我不会得到任何结果,因此它似乎是导致问题的字段内容或过滤条件。

我尝试在索引的“查询”>“过滤器”选项卡中向名为“搜索”的默认查询添加一个否定过滤器,url:"http://www.thesite/p/*" 但查询过滤器似乎不支持通配符,尽管它们支持“爬虫”>“排除列表过滤器”。

我尝试在 Schema > Fields 中添加一个名为 urlField 的新字段,并使用使用 Whitespace Tokenizer 和正则表达式 ( http://www.thesite/(c|p)/) 配置的分析器填充它。当我使用“测试”按钮时,它似乎为我的测试 URL 生成了两个令牌http://www.thesite/p/123

  • http://www.thesite/p/
  • p

我希望能够使用 Query > Filter 中的第一个来排除所有商店结果,并且如果我需要在某个时候搜索产品页面,可以选择使用 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/"到 Query > Filters 并勾选了否定框。

当我使用默认渲染器时,这似乎对结果没有影响。

为了查看它是否影响返回的结果,我取消了查询过滤器中的否定框,我在默认渲染器中没有得到任何结果。这让我相信 urlShop 字段没有被填充,但我不确定如何直接检查。

我想知道是否有更简单的方法可以做到这一点,但如果我的方法在 OpenSearchServer 的上下文中有意义,请你帮我找出问题所在吗?

该网站在 IIS 下运行,OpenSearchServer 将配置在运行在 Tomcat 中的同一台服务器上。

4

1 回答 1

2

Finally figured this out...

Go to query and hit edit for your configured query. Then go to the filters tab. Add a query filter like this:

urlExact:"http://myurltoexclude*"

Check the "negative" box. Click add.

Now make sure to click "save in the tiny little button on the right hand side. This is the part I missed. The URLS are still in the DB and crawl, but at least they aren't returned in results.

于 2015-08-04T23:24:14.040 回答