Заставить Solr игнорировать косую черту?

У меня есть индексированное поле 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 (да, я знаю, что он старый).


person OMGitzMidgar    schedule 31.01.2019    source источник


Ответы (2)


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

Учитывая это в качестве входных данных:

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-адресам с косой чертой в конце или без нее.

person jwismar    schedule 31.01.2019

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

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

Для этого требуется подходящий тип поля в файле 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"/>
person cheffe    schedule 01.02.2019
comment
Это ближе к тому, что я ищу (Tokenizer или что-то подобное), но я не хочу, чтобы q=url:www.test.com соответствовал проиндексированному URL-адресу чего-то вроде https://www.test.com/api/v1/test/. Есть ли способ изменить этот токенизатор так, чтобы он игнорировал только завершающую косую черту и ничего больше? - person OMGitzMidgar; 01.02.2019
comment
Нет, я так не думаю. - person cheffe; 02.02.2019