Заставить Солр игнорировать косую черту? - PullRequest
0 голосов
/ 31 января 2019

У меня есть индексированное поле url, где некоторые из моих документов имеют косую черту в конце своего поля url, а другие - нет.Я хочу запросить это поле в Solr, игнорируя косую черту, чтобы все результаты сопоставления возвращались независимо от того, есть ли у них косая черта в конце или нет.

Например, если я отправляю запрос: q=url:https://www.test.com/api/v1/test/ Я хочу вернуть любые документы, которые имеют url поле https://www.test.com/api/v1/test/ ИЛИ https://www.test.com/api/v1/test.

Аналогично, если я отправляю запрос без завершающего слеша, я хочу получить те же результаты, что и выше (url с ИЛИ без косой черты).

Как это можно сделать?Я знаю о функции подстановочных знаков Solr, но я не хочу игнорировать какой-либо конечный символ (например, url:https://www.test.com/api/v1/test? не должен возвращать документы с url из https://www.test.com/api/v1/test).Я хочу, чтобы этот эффект подстановки использовался только для одной косой черты.

Если это поможет, я на Solr 4 (да, я знаю, что он старый).

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете использовать для этого PathHierarchyTokenizer .В качестве плюса, вы также можете выполнять поиск по частям URL-адреса без использования подстановочных знаков.

Например, q=url:www.test.com также будет соответствовать индексируемому URL-адресу.

Для этого требуется соответствующий fieldType в вашем schema.xml

<fieldType name="url" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Затем добавьте или измените определение поля ваших документов, чтобы использовать этот url fieldType, также в schema.xml

<field name="url" type="url" indexed="true" stored="true"/>
0 голосов
/ 31 января 2019

Я бы, вероятно, использовал замену Regex при индексации, и заменил бы ^(.*)(?:\/)?$ на $1 ...

Учитывая это как input:

url:https://www.test.com/api/v1/test?
url:https://www.test.com/api/v1/test/
url:https://www.test.com/api/v1/test

, его следует хранить:

url:https://www.test.com/api/v1/test?
url:https://www.test.com/api/v1/test
url:https://www.test.com/api/v1/test

Если вы затем сделаете такую ​​же замену при запросе, ваши запросы должны соответствовать ожидаемым: запросы с косой чертой или без нее будут совпадать с сохраненными URL-адресами с косой чертой или без нее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...