Прежде всего, поскольку в вашем файле mkdocs.yml
не указана тема, предполагается, что вы используете тему по умолчанию, которая использует реализацию поиска по умолчанию. Обратите внимание, что некоторые другие темы (особенно material
) реализуют свое собственное решение для поиска, которое отличается от заданного по умолчанию. Этот ответ не относится к этим темам.
Параметр поискового токенайзера игнорируется, поскольку вы определяете его неправильно. Как задокументировано , параметр называется separator
, а не tokenizer
, и его необходимо определить как подраздел подраздела search
. Например:
plugins:
- search:
separator: '[\s\-\.]+'
Что касается поисковых терминов, обратите внимание, что MkDocs использует [lunr.js] в качестве поисковой системы. Lunr. js документы как конечный пользователь может изменять поиск различными способами.
Кстати, ваш поиск auto-filling
не будет совпадать, как вы ожидаете, потому что дефис ( -
) является символом-разделителем. Другими словами, когда создается индекс поиска, дефис обрабатывается так же, как пробел, а слова auto
и filling
индексируются как два отдельных слова. Если вы не хотите такого поведения, вам нужно удалить дефис из настроек. Но это, вероятно, не то, что вы хотите.
По умолчанию используется поиск ИЛИ. Если какой-либо из терминов (каждый из которых разделен каким-либо одним из символов-разделителей) существует в документе, то этот документ возвращается в качестве результата поиска. Если в документе существует несколько терминов, этот документ имеет более высокий рейтинг. Однако поиск ИЛИ не учитывает термины, относящиеся друг к другу в документе.
Вы можете найти поиск И более эффективным. Просто добавьте +
к каждому термину (+do +not +select +auto +filling
), и тогда вы получите только те результаты, которые содержат все термины. Обратите внимание, что я также оставил дефис вне поисковых терминов, так как он является разделителем, как описано выше.
Однако, хотя он будет возвращать только результаты, содержащие все термины, он не поддерживает результаты, содержащие термины, сгруппированные в указанном порядке c. Распространенным решением, которое используют поисковые системы, является требование, чтобы термины, заключенные в кавычки, соответствовали указанному порядку c. Однако согласно livernn / lunr.js # 62 , lunr. js не поддерживает эту функцию в настоящее время.
Кроме того, поисковая система игнорирует стоп-слова. В частности, некоторые слова настолько распространены, что они полностью игнорируются поисковой системой. Например, такие слова, как the
или a
, встречаются несколько раз в каждом документе на английском языке Engli sh. Таким образом, поисковая система игнорирует их.
Тогда возникает проблема stemming , которая объясняется в документации по lunr. js:
Stemming это процесс приведения слов с перегибом или производных к их основному или основному виду. Например, в основаниях «поиск», «поиск» и «поиск» должны быть слова «поиск». Это имеет два преимущества: во-первых, число токенов в поисковом индексе и, следовательно, его размер значительно уменьшаются, и, кроме того, это увеличивает отзыв при выполнении поиска. Документ, содержащий слово «поиск», вероятно, будет иметь отношение к запросу «поиск».
Учитывая вышеизложенное, вы, вероятно, обнаружите, что поиск select auto fill
, скорее всего, вернет точно такие же результаты, как do not select auto-filling
. Однако использование +filling
должно помочь, так как оно вызывает точное совпадение для термина filling
, а не слова fill
.
Наконец, вы спрашиваете ...
Как реализовать хорошую поисковую систему
Обратите внимание, что такой вопрос слишком широк и не входит в число вопросов c здесь. Тем не менее, в документации по lunr. js, на которую есть ссылки выше, приводится краткое изложение многих базовых c концепций, используемых большинством поисковых систем. Хотя вы, вероятно, сделаете несколько разных вариантов в своей реализации (как и я), базовые концепции c должны дать вам отправную точку для поиска терминов в вашем исследовании, если вы действительно заинтересованы в создании собственной поисковой системы целиком. .