Однако в шестой версии я такой опции не вижу. Обычный поиск по синонимам работает. Есть ли возможность задать какую-то онтологию, и, скажем, при поиске pet находить документы и с cat, и с dog?
В вашем примере синонимы используются при поиске. Поэтому cat будет искать cat и pet, но pet будет искать только pet. Надо либо переместить синонимы из поиска в индексирование (и изменить тип на просто synonyms), либо вывернуть синонимы наизнанку:
pet => pet, cat, kitten, dog, puppy
cat => kitten, cat
dog => dog, puppy
Понял, спасибо. А есть ли возможность использовать при этом вложенную иерархию, то есть указать для pet только его непосредственных потомков - cat и dog, но при этом искать по их синонимам тоже? Иначе, боюсь, мало-мальски сложная иерархия разрастется до непомерных величин, и ее очень сложно будет описывать.
И еще: подскажите, пожалуйста, аналайзер подхватывает файл с синонимами каждый раз при выполнении запроса, или только при первичной индексации? Если второе, то можно ли заставить его принудительно переиндексировать файл?
Можно применить тот же самый фильтр синонимов несколько раз. Ничего более разумного в данный момент в голову не приходит.
Аналайзер перегружает файл синонимов при открытии индекса. Но при этом записи, которые уже были проиндексированы, не переиндексируются. Их можно переиндексировать с помощью команды reindex.
попробуйте и эту строчку порезать до самого минимума
попробуйте воткнуть между двумя вызовами одного фильтра что-то еще
попробуйте определить фильтр для второго прохода с другим именем
(вообще имена я бы давал какие-то более свои избегая стандартных эластиковых слов
черт его знает что он там внутри подумает и как их интерпретирует)
Нет, дело не в том, что списков два. Дело в том, что, когда он матчится сам на себя, происходит что-то непонятное. Например, если я укажу два фильтра синонимов и обращусь в них к разным файлам с разным содержимым, то все ок. А вот если в этих двух файлах встречается одинаковый термин, то вылетает эта ошибка.
а в чем собственно смысл двойного прогона одного и того-же правила?
и почему вы пишете dog => dog слева и справа одно и то-же?
по моему дак слева должно быть слово а справа синонимы
по моему тут вообще можно чарфильтр типа мапинг сделать чтобы заменяло одно на другое и все
а так как вы делаете то надо каждый уровень вашей иерархии поместить в отдельное описание синонимов и потом прогнать по очереди
вот так как-то я это понимаю
Желательно, конечно, при индексировании. Предполагается, что я, к примеру, загружу туда один раз большой иерархический словарь, и дальше уже буду искать по термину нужного уровня и его наследникам. Нужны позвоночные - нахожу всех позвоночных и т.п. Мне кажется, это дешевле сделать один раз, чем каждый раз при поиске.
Да, наверное, проще всего тогда написать скрипт, который будет вам генерировать расширенный список синонимов из списка, который вы создадите и будете поддерживать.
Пока у меня нет необходимых словарей, я сгенерировал образец синонимов, которые буду индексировать - 10 строчек, в которых 70 тысяч терминов матчатся на один:
Пытаюсь сгенерировать индекс с этим фильтром, но эластик не реагирует вот уже 20 минут. Как вы считаете, это надолго? (на тестовой системе 4 ядра по 2,6 Гб, 16 гб оперативки и ssd) Можно ли запустить эластик с конкретными параметрами по производительности, чтобы он не стеснялся использовать ресурсы?
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.