SOLR: Могут ли изменения в файле synonyms.txt вступить в силу без переиндексации?

мы используем Sunspot-solr 4.0, когда я обновляю файл синонимов, он ничего не меняет в поиске. Действительно ли мне нужно повторно индексировать после внесения изменений в synonyms.txt или есть какой-либо другой способ обновить файл синонимов, который мне не хватает?


person Sarmad Tabassum    schedule 06.09.2016    source источник


Ответы (1)


Это зависит от того, когда вы расширяете синонимы. Если вы расширяете во время запроса, обновления будут видны без переиндексации, но если вы расширяетесь во время индексации (что является рекомендуемым способом), вам придется переиндексировать, чтобы новые синонимы были включены в индекс. .

Причина, по которой рекомендуется расширение во время индексации по сравнению с временем запроса, описано в старой вики :

Это связано с тем, что во время запроса могут возникнуть две потенциальные проблемы:

Lucene QueryParser токенизирует пробелы перед передачей любого текста анализатору, поэтому, если человек будет искать слова sea biscit, анализатору будут даны слова sea и biscit по отдельности, и он не будет знать, что они совпадают с синонимом.

Поиск по фразе (например, sea biscit) заставит QueryParser передать всю строку анализатору, но если SynonymFilter настроен на расширение синонимов, тогда, когда QueryParser получит результирующий список токенов обратно из анализатора, он построит MultiPhraseQuery, который не даст желаемого эффекта. Это связано с ограниченным механизмом, доступным для анализатора, чтобы указать, что два термина занимают одну и ту же позицию: нет способа указать, что фраза занимает ту же позицию, что и термин. В нашем примере результирующий запрос MultiPhraseQuery будет иметь вид (sea | sea | seabiscuit) (biscuit | biscit), что не соответствует простому случаю появления seabiscuit в документе.

Даже если вас не беспокоят синонимы из нескольких слов, различия idf по-прежнему делают синонимы времени индексации хорошей идеей. Рассмотрим следующий сценарий:

Индекс с текстовым полем, который во время запроса использует SynonymFilter с синонимом TV, Televesion и expand = true. Многие тысячи документов, содержащие термин text: TV Несколько сотен документов, содержащих термин text: Television Запрос текста: TV будет расширяться до (text: TV text: Television) и более низкого docFreq для текста: Television даст документам, которые соответствуют Television, гораздо более высокий балл, чем документам, соответствующим TV, что может быть несколько противоречивым для клиента. Расширение (или сокращение) времени индекса приведет к одинаковому идентификатору idf для всех документов, независимо от того, какой термин содержится в исходном тексте.

Подробное объяснение того, что на самом деле происходит за кулисами, доступно в Лучшая обработка синонимов в Solr.

Пока вы знаете об этих проблемах и компромиссе, синонимы во время запроса могут работать нормально, но вам придется протестировать это на основе ваших запросов и ожидаемых результатов - и знать о подводных камнях. .

person MatsLindh    schedule 06.09.2016
comment
Спасибо, Матс. но переиндексировать миллионы записей требует времени, можем ли мы как-нибудь сократить это время? - person Sarmad Tabassum; 06.09.2016
comment
Просто переиндексируйте документы, затронутые вашими синонимами :-) - person David George; 06.09.2016
comment
@MatsLindh Я не мог понять эту строку (море | море | сухарь) (бисквит | бисквит), которая не соответствовала бы простому случаю появления сухого печенья в документе. Поскольку seabiscuit присутствует в MultiPhraseQuery. - person user2478236; 19.05.2017
comment
@ user2478236 Но для фразового запроса необходимо, чтобы совпадал и второй термин (biscit) - вот в чем суть фразовых запросов. :-) Но теперь у нас есть SynonymGraphFilter, который должен помочь решить большинство этих проблем. - person MatsLindh; 02.01.2019