2015-10-20 5 views
0

Я пытаюсь выяснить, как реализовать «поиск по силе» с использованием нескольких полей/терминов. Например:Поиск по критерию поиска на основе множественного числа

Поиск:

  • Количество ног: 4
  • Имеет Fur: True
  • Имеет Копыта: Истинные
  • Ключевые слова: Moo

Результаты :

не
  • [High] Корова
  • [Medium] Cat
  • [Medium] Собака
  • [Low] Голая Mole-крыса
  • [No Match] Bird

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

Мой язык выбора - C# .NET, и я использую LINQ + Fluent NHibernate. Я играю с несколькими различными способами, чтобы реализовать это, но большинство чувствует себя неуклюжим. В настоящее время я использую более 100 000 «животных», и их можно искать по сравнению с ~ 15 полями.

Вопросы:

ли этот вид поиска есть имя?

Есть ли лучшие практики или методы, о которых я должен знать, пытаясь реализовать это?

Каковы некоторые высокоэффективные способы реализации такого поиска? Код Psuedo и общая логика оценивались точно так же, как и код.

+1

http://stackoverflow.com/questions/177753/search-ranking-relevance-algorithms –

+1

Вы можете использовать полный текстовый поиск SQL Server для генерации оценки релевантности по ключевым словам (-ам) и объединить это с вашими булевыми сгенерировать составную оценку релевантности. Это должно сделать ваши поиски довольно быстрыми. –

ответ

1

Вы говорите о «weighted term query».

Поскольку вы уже используете LINQ и я полагаю, MSSQL, ваше быстрое решение, вероятно, чтобы написать хранимую процедуру (что вы будете в конечном счете, коллировать с LINQ), который использует функцию полнотекстового поиска (CONTAINSTABLE и ISABOUT) в «ранг «результат по вашему желанию.


Если вы ожидаете тяжелый поисковый трафик или ваши требования ранжирования получить гораздо более сложным, или вашу коллекция растет значительно вы должны рассмотреть разорвать эту функциональность в поисковой систему, как Solr или Elasticsearch.

Смежные вопросы