2013-05-28 2 views
1

Какой следующий лучший вариант для полнотекстового поиска по базе данных без Django без Haystack?Эффективный Django полнотекстовый поиск без Haystack

У меня есть модель, как:

class Paper(models.Model): 
    title = models.CharField(max_length=1000) 

class Person(models.Model): 
    name = models.CharField(max_length=100) 

class PaperReview(models.Model): 
    paper = models.ForeignKey(Paper) 
    person = models.ForeignKey(Person) 

мне нужно искать для работ по названию и имя рецензента, но я также хочу, чтобы искать с точки зрения человека, и выяснить, какие документы они имеют и гавань» t рассмотрено. С Haystack тривиально внедрять полнотекстовый индекс для поиска по полям заголовка и имени, но, насколько я могу судить, нет никакого способа сделать «левое внешнее соединение», необходимое для поиска документов без рассмотрения конкретным человеком ,

ответ

1

Стог является просто оболочкой, которая предоставляет несколько различных движки поисковых систем:

  • Solr
  • ElasticSearch
  • Whoosh
  • Xapian

Там могут быть и другие движки, а также доступные в виде плагинов.

Таким образом, реальный вопрос заключается в том, есть ли база данных поиска, которая дает мне желаемую функциональность, и делает ли haystack эту функциональность?

Ответ на этот вопрос, вероятно, вы можете использовать elasticsearch *, но обратите внимание на астерикс.

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

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

Другим может быть использование «вложенных документов» в поиске elastics.

И, наконец, использовать «родительские/дочерние документы» в elasticsearch.

Вы все еще можете использовать стог сена для индексирования, с некоторыми взломами, но вы, вероятно, захотите напрямую использовать один из необработанных бэкэндов, например, поиск пиелопластов или pyes.

+0

Я думаю, что моя более общая точка - это тип поиска, который я делаю, по своей природе не подходит для типа функций поиска. Вероятно, индексированные SQL-таблицы очень эффективно обрабатывают левые внешние соединения и даже обрабатывают полнотекстовый поиск в некоторых случаях. Я пробовал Whoosh (horrible), Solr и ElasticSearch, и никто не справляется с этим конкретным случаем очень хорошо. – Cerin

+0

@Cerin Вы прочитали мои комментарии о родительских/дочерних документах в elasticsearch? –

0

Я использую Haystack + эластичный поиск и до сих пор его работы довольно хорошо. Не думайте, что это тривиально. Вы можете легко реализовать свое требование, если существует связь между бумагой и человеком.

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