【问题标题】:Lucene - exclude fields from being searchedLucene - 从搜索中排除字段
【发布时间】:2016-07-07 16:02:39
【问题描述】:

我有一个搜索索引,需要一个 lucene 查询,它会有条件地搜索指定的字段。最终结果将是,如果您已登录网站,所有字段都将被搜索,或者如果您已注销,则通过修改 lucene 查询将跳过指定字段。

我目前最接近的是:

+(term1~ term2~) +_culture:([en-gb TO en-gb] [invariantifieldivaluei TO invariantifieldivaluei]) **-FieldToIgnore1:(term1 term2) -FieldToIgnore2:(term1 term2)**

但是,问题在于,如果其中一个搜索词存在于未提及的字段之一(FieldToIgnore1 或 FieldToIgnore2)中,则该文档将被忽略,因为它已被排除为要忽略的字段之一已匹配。

如何修改它以使 lucene 甚至不匹配要忽略的字段?

【问题讨论】:

  • 我不确定我是否理解。通常,忽略一个字段非常容易。您只是不要在该字段上搜索。您使用的是MultiFieldQueryParser 还是什么?还是您的默认搜索字段是某种包罗万象的字段?还是什么?
  • 道歉 - 我对 Lucene 术语不太熟悉,但我相信这是包罗万象的字段选项。该功能正在使用Kentico CMS's smart search 构建,如果有帮助,它使用Lucene query parser syntax
  • 在这种情况下,可能无法判断匹配来自哪个字段。那个“全部”字段将只是一大堆词。您可能需要编写查询以搜索您想要的字段(或者可能索引一个单独的搜索字段,该字段仅组合您要搜索的字段)。不过,我对 Kentico 一无所知,所以我不知道它是否支持调整索引等。

标签: lucene kentico


【解决方案1】:

您是否尝试过修改文档字段本身的可搜索性,而不是通过 Lucene 和智能搜索结果 webpart 限定您的搜索。您可以在页面类型或索引本身上设置搜索参数。

转到页面类型 --> [您的文档类型] --> 搜索字段,并设置哪些字段可以搜索,哪些不可以搜索。

版本 9 在智能搜索应用中为您提供了这些设置。详情请见these docs

【讨论】:

  • 谢谢 Emma,我已经考虑过了,但是禁用要忽略的字段的可搜索性将不符合要求的条件方面,如果您已登录,它将搜索所有内容.我想也许我唯一的选择是创建一个排除这些字段的自定义搜索索引 - 我只是希望有一个更简单的选项可以由 lucene 处理......
  • 如果 Lucene 仍然是 janky(我在输入像你这样的条件时运气好坏参半)并且搜索范围因一般用户和经过身份验证的用户而异,那么你可以做的是放入两个搜索 (或搜索结果)网络部件。将一个的可见性设置为Display to roles: _notauthenticated_,将另一个设置为Display to roles: _authenticated_
  • 那么登录用户的webpart可以点击搜索索引中的所有字段(跳过Lucene);对于 Lucene -term 的那些字段,另一个将被阻止
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多