У меня есть индекс поиска и требуется запрос lucene, который будет условно искать указанные поля. Конечным результатом будет то, что если вы зашли на сайт, все поля будут найдены, или если вы вышли из системы, указанные поля будут пропущены путем изменения запроса lucene.Lucene - исключить из поиска поля
Ближайший у меня есть на данный момент:
+(term1~ term2~) +_culture:([en-gb TO en-gb] [invariantifieldivaluei TO invariantifieldivaluei]) **-FieldToIgnore1:(term1 term2) -FieldToIgnore2:(term1 term2)**
Проблема с этим, однако, если один из поисковых терминов существует в одном из полей не упоминается (FieldToIgnore1 или FieldToIgnore2), то документ игнорируется, потому что он исключен, поскольку одно из игнорируемых полей совпадает.
Как это можно изменить, так что lucene даже не совпадает с полями для игнорирования?
Я не уверен, что понимаю. Как правило, довольно легко игнорировать поле. Вы просто * не ищите * в этом поле. Вы используете 'MultiFieldQueryParser' или что-то еще? Или поле поиска по умолчанию - какое-то поле для всех? Или что? – femtoRgon
Извинения. Я не слишком знаком с терминологией Lucene, но я считаю, что это опция для всех полетов. Функциональность создается с помощью интеллектуального поиска Kentico CMS (https://docs.kentico.com/display/K9/Smart+search+syntax), который использует синтаксис синтаксического анализа запросов Lucene (http: //lucene.apache .org/core/3_0_3/queryparsersyntax.html), если это помогает? – ajbrun
В этом случае, вероятно, нет способа определить, из какого поля происходит совпадение. Это «все» поле будет просто большой сумкой слов. Скорее всего, вам нужно будет написать свой запрос для поиска * только * полей, которые вы хотите (или, возможно, указате отдельное поле поиска, которое объединяет только поля, которые вы хотите найти). Однако я ничего не знаю о Kentico, поэтому я не знаю, поддерживает ли она настройку вашего индекса и тому подобное. – femtoRgon