【发布时间】: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 一无所知,所以我不知道它是否支持调整索引等。