мы используем Sunspot-solr 4.0, когда я обновляю файл синонимов, он ничего не меняет в поиске. Действительно ли мне нужно повторно индексировать после внесения изменений в synonyms.txt или есть какой-либо другой способ обновить файл синонимов, который мне не хватает?
SOLR: Могут ли изменения в файле synonyms.txt вступить в силу без переиндексации?
Ответы (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.
Пока вы знаете об этих проблемах и компромиссе, синонимы во время запроса могут работать нормально, но вам придется протестировать это на основе ваших запросов и ожидаемых результатов - и знать о подводных камнях. .