2

假设我有一个包含 20 个表的数据库,所有表都具有相同的架构,我如何为所有表创建一个索引?如果我每张表都有一个索引,那么搜索就可以了。我成功地为 20 个表创建了一个索引,但每次搜索都会返回第一个表的第一条记录。

索引配置:

index all_table_index
{
    type            = plain
    source          = TABLE1
    source          = TABLE2
    source          = TABLE3 
    source          = TABLE4
    source          = TABLE5
    ...
    path            = /data/sphinx/all_table_index
    #docinfo        = extern
    charset_type    = utf-8
}

另外:唯一整数字段有重复项(主 ID 自动增量 - 每个表都相同!)。这会影响对任何其他字段的搜索吗?谢谢您的帮助。

4

2 回答 2

3

> 唯一整数字段有重复项(主 ID 自动递增 - 每个表都相同!)。

那是你的问题。

文档 ID 必须是唯一的。它是 sphinx 跟踪文档的方式,因此如果您有多个具有相同 id 的文档,它们将相互覆盖,然后您将无法区分单独的底层文档。

...所以您需要安排 IDS 是唯一的。

有很多方法可以做到这一点,例如

sourse TABLE1 {
sql_query = SELECT id*20 as id, ... from table1

sourse TABLE2 {
sql_query = SELECT (id*20)+1 as id, ... from table2

sourse TABLE3 {
sql_query = SELECT (id*20)+2 as id, ... from table3

ETC...

于 2013-07-09T22:08:05.357 回答
1

一般用这个

source TABLE1 {
sql_query = SELECT CONCAT(id,01) as id, 'table1' AS source, '01' AS source_code,   ... from table1
sql_attr_string = source
sql_attr_str2ordinal = source_code
  • 01而不是 1,如果超过 100 个来源,则为 001(但从未发生在我身上)
  • 'table1' 作为源只是为了容易知道源"
  • '01' AS source_code只是为了方便过滤,或者 groupby
于 2013-07-15T18:14:20.003 回答