Lucene:如何搜索EAV或1:m?

时间:2011-11-21 00:57:27

标签: search solr lucene full-text-search zend-lucene

我正在使用Zend Lucene,但不认为这个问题特定于该库。

说我想提供书籍数据库的全文搜索。假设以下模型:

模型1:

TABLE: book
- book_id
- name

TABLE: book_author
- book_author_id
- book_id
- author_id

TABLE: author
- author_id
- name

(一本书可以有0位或更多位作者)

模型2:

TABLE: book
- book_id
- name

TABLE: book_eav
- book_eav_id
- book_id
- attribute (e.g. "author")
- value (e.g. "Tom Clancy")

(一本书可以有0个或更多作者+关于出版商,页数等的信息)

我需要做什么才能将与特定图书相关联的所有作者插入要编入索引的文档中?我是否将所有作者都放在文档的一个字段中?我会使用某种分隔符来分组作者信息吗?我正在寻找这类数据的一般策略。

1 个答案:

答案 0 :(得分:0)

使用分隔符将所有作者放在文档的一个字段中。 所以文档架构将是:

book_id
name
author: |author 1|author 2|...|author n|
other_attribute_1: |val 1|val 2|
other_attribute_2: |val 1|val 2|

使用此架构,您可以使用不同的提升搜索作者,例如:

(author:"|Tom Clancy|")^10 OR 
(author:"Tom Clancy")^5 OR 
(author:Tom Clancy)^1

此查询将首先显示完全匹配,然后匹配短语,最后显示其他匹配。