Индексирование и запрос URL-адресов в Solr - PullRequest
7 голосов
/ 13 января 2011

У меня есть база URL-адресов, которые я хотел бы найти.Поскольку URL-адреса не всегда пишутся одинаково (может иметь или не иметь www), я ищу правильный путь к URL-адресам индекса и запроса.Я попробовал несколько вещей, и я думаю, что я близок, но не уверен, почему это не работает:

Вот мой тип настраиваемого поля:

 <fieldType name="customUrlType" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0" preserveOriginal="0"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

Например:

http://www.twitter.com/AndersonCooper при индексировании будет иметь следующие слова в разных позициях: http, www, twitter, com, andersoncooper

Если я ищу просто twitter.com/andersoncooper,Мне бы хотелось, чтобы этот запрос совпадал с индексированной записью, поэтому я также использую WDF для разделения поискового запроса, однако поисковый запрос в итоге выглядит примерно так:

myfield :( "twitter com andersoncooper") когда действительно нужно, чтобы он совпадал со всеми записями, имеющими все следующие отдельные слова: twitter com andersoncooper

Есть ли другой фильтр запросов или токенизатор, который я должен использовать?

Ответы [ 3 ]

0 голосов
/ 17 января 2011

Это должно быть самое простое решение:

<field name="iconUrl" type="string" indexed="true" stored="true" />

Но для вашего требования вам нужно сделать его многозначным и проиндексировать его 1. без изменений 2. без http 3. без www

или сделать URL доступным для поиска с помощью подстановочных знаков в начале (что, я думаю, медленнее)

0 голосов
/ 21 октября 2016

Если я понимаю это утверждение из вашего вопроса

myfield :( "twitter com andersoncooper"), когда действительно хотите, чтобы оно совпадало со всеми записями, в которых есть все следующие отдельные слова: twitter com andersoncooper

Вы пытаетесь написать запрос, который бы соответствовал:

http://www.twitter.com/AndersonCooper

и

http://www.andersoncooper.com/socialmedia/twitter

(обе ссылки содержат все из токенов), но не совпадают либо

http://www.facebook.com/AndersonCooper 

, либо

http://www.twitter.com/AliceCooper

Если это правильно, ваша существующая конфигурация должна работать нормально.Предполагая, что вы используете стандартный синтаксический анализатор запросов и делаете запросы с помощью curl или другого механизма, основанного на URL, вам нужно, чтобы параметр запроса был похож на это:

&q=myField:andersoncooper AND myField:twitter AND myField:com

Одна из ошибок, которая могла быть отключенаВы понимаете, что оператором запроса по умолчанию (между терминами в запросе) является «ИЛИ», именно поэтому AND должен быть явно указан выше.Кроме того, чтобы сэкономить место, вы можете изменить оператор запроса по умолчанию на «И» следующим образом:

&q.op=AND&q=myField:(andersoncooper twitter com)
0 голосов
/ 14 января 2011

Вы можете попробовать токенизатор ключевого слова

Из книги Сервер корпоративного поиска Solr 1.4 , опубликованной Packt

KeywordTokenizerFactory: это не на самом деле делать токенизацию или что-нибудь вообще по этому вопросу! Это возвращает исходный текст как один термин. Есть случаи, когда у вас есть поле, которое всегда получает одно слово, но вам нужно сделать базовый анализ как в нижнем регистре. Тем не менее, это больше вероятно, что из-за сортировки или граненые требования вам потребуются индексированное поле не более один термин. Конечно, документ поле идентификатора, если указано и не указано число, будет использовать это.

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