Lucene:如何搜索EAV或1:m



我正在使用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个或多个作者+出版商、页数等信息)

为了在要索引的文档中插入与特定图书相关的所有作者,我需要做些什么?我是否将所有作者放在文档的一个字段中?我是否应该使用某种分隔符对作者信息进行分组?我在寻找这种数据的一般策略。

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

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

这个查询将首先显示精确匹配,然后是短语匹配,最后是其他匹配。

最新更新