Поиск и рейтинг коротких фраз (например, названия фильмов)

если Вы только собираетесь использовать итератор однажды и выбросить его, вторая форма предпочтена; иначе необходимо использовать первую форму

6
задан Greg Beech 18 November 2009 в 16:57
поделиться

3 ответа

Похоже, рейтинг SQL FTS близок, но не совсем к тому, что вы ищете, и что вы сузили число "не совсем" до трех:

  • перегибы - это ранжируются идентично нефлективным формам
  • слова ранжируются идентично их синонимам
  • точные совпадения (или короткие заголовки) ранжируются идентично совпадениям из одного слова в более длинных заголовках

Все три из них имеют общее что очень простой автоматизированный постпроцессор результатов может использовать эти правила для разрыва связей между результатами с одинаковым рейтингом: если есть точное совпадение, ранжируйте его выше неточного совпадения и ранжируйте более короткие заголовки перед более длинными. Вы можете рассмотреть возможность сохранения FTS, и просто поместите некоторый код (либо в сохраненную процедуру, либо в ваше приложение) поверх FTS, который сортирует группы связанных результатов по указанным вами критериям. Это, вероятно, было бы проще, чем переключиться на Lucene или другую реализацию полнотекстового поиска сторонних разработчиков.

Если бы я был на вашем месте, поскольку у вас уже есть что-то, работающее с FTS, я бы попробовал взлом пост-обработки выше и посмотрите, «достаточно ли он хорош», чтобы удовлетворить ваши потребности, поскольку это, вероятно, будет проще всего.

Если этого недостаточно, я бы начал с просмотра Lucene.NET (бесплатно), Solr (бесплатно) и dtSearch ($ $$). Обратите внимание, что ни один из них не будет таким простым, как FTS - особенно Lucene.NET, который, как известно, является самым популярным и очень полнофункциональным, но требует изрядного количества кода, конфигурация, обслуживание и т. д. Вы можете увидеть эту ветку SO для некоторых других мнений, вероятно, есть больше таких веток на SO и в других местах, если вы хотите больше мнений.

Если вы ищете функцию подсказки правописания типа "вы имели в виду ...". В Pro Full-Text Search в SQL Server 2008 есть пример создания такой функции поверх FTS (ссылка содержит некоторые выдержки из Google Книг). Отвечает ли это вашим потребностям? Если нет, есть множество других вариантов , как бесплатных, так и бесплатных.

В Pro Full-Text Search в SQL Server 2008 есть пример создания такой функции поверх FTS (ссылка содержит некоторые выдержки из Google Книг). Отвечает ли это вашим потребностям? Если нет, есть множество других вариантов , как бесплатных, так и бесплатных.

В Pro Full-Text Search в SQL Server 2008 есть пример создания такой функции поверх FTS (ссылка содержит некоторые выдержки из Google Книг). Отвечает ли это вашим потребностям? Если нет, есть множество других вариантов , как бесплатных, так и бесплатных.

7
ответ дан 10 December 2019 в 02:49
поделиться

Работая с как SQL Server (2005) FullText, так и Lucene (.NET) в производственной среде, я действительно думаю, что Lucene - лучший выбор:

SQL Server FTS хорош и быстр; но вы не можете реально изменить способ создания индексов. Кроме того, вы не можете просто «видеть» индексные таблицы. Вся реализация скрыта, и как таковой этот инструмент отлично подходит для стандартного общего FTS, но сложнее для конкретных приложений.

Lucene, с другой стороны, использовался и тестировался во множестве сценариев (я настоятельно рекомендую Lucene в действии , если вы решите пойти по этому пути). Даже если существующие реализации не совсем соответствуют вашим потребностям, вы всегда можете создать «новую» конкретную реализацию (напишите свой собственный анализатор / токенизатор / фильтр - стеммер !! - 1), хотя количество параметризации люцена достаточно (2) и вы всегда можете проверить содержимое индекса, используя Luke (3). Вы также получаете приложение для поиска, не зависящее от хранилища данных (4), и он одинаково хорошо работает для Java && .NET (5). Кроме того, если это вас интересует, существует также реализация Hibernate && NHibernate ( Hibernate Search - 6).

0
ответ дан 10 December 2019 в 02:49
поделиться

Я знаю, что вы не заинтересованы в изобретении колеса, но я хотел внести свой вклад в то, что, по крайней мере, могло бы заставить вас крутиться.

' How to Strike a Match ' - один из моих любимых постов по этой теме. В нем автор сопоставляет строки на основе сходства последовательных дублетов между словами.

Например, слова search и smirch разбиваются на дублеты по буквам: se, ea, ar, rc, ch для поиска и sm, mi, ir, rc, ch для ухмылки. Затем количество совпадающих дублетов умножается на два (rc и ch соответствуют, поэтому 2 * 2) и делится на общее количество дублетов (в данном случае 5 + 5 = 10). 4/10 = 40% совпадения между поиском и ухмылкой.

Это наказывает длинные несвязанные строки, потому что они увеличивают знаменатель без увеличения числителя.

Во втором примере этот алгоритм выделит луну как лучший пример, но не преминет сохранить Темную сторону Луны и т. д. - они просто будут занимать более низкое место. В вашем первом примере вам нужно будет применить какое-то лексическое преобразование перед вызовом этого алгоритма, потому что он не сможет найти похожие слова, которые изменяют основу (например, видеть / видел / видел), хотя он будет хорошо работать с не-основанием- чейнджеры (Франция / французский).

Я не думал, как реализовать это непосредственно в приложении SQL.

2
ответ дан 10 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: