php - Sphinx 搜索对某些字段建立索引,但对其他字段不建立索引

标签 php python mysql sphinx

我正在将通用 Sphinx 与 Python 结合使用(尽管我也针对 PHP 进行了测试并遇到了同样的问题)。我有一个表,其中有几个字段,我希望能够在 sphinx 中搜索,但似乎只有某些字段被索引。

这是我的源代码(dbconfig 只有连接信息):

source bill_src : dbconfig
{
    sql_query       = \ 
        SELECT id,title,official_title,summary,state,chamber,UNIX_TIMESTAMP(last_action) AS bill_date FROM bill

    sql_attr_timestamp = bill_date

    sql_query_info      = SELECT * FROM bill WHERE id=$id
}

这是索引

index bills
{
    source          = bill_src
    path            = /var/data/bills
    docinfo         = extern
    charset_type        = sbcs
}

我正在尝试使用扩展匹配模式。看起来titlesummary都不错,但是official_titlestatechamber 字段在索引中被忽略。例如,如果我这样做:

@official_title 平价医疗法案

我得到:

query error: no field 'official_title' found in schema

但是使用 @summary 进行相同的查询会产生结果。我缺少什么想法吗?

编辑 这是我尝试索引的表:

+--------------------+--------------+------+-----+---------+----------------+
| Field              | Type         | Null | Key | Default | Extra          |
+--------------------+--------------+------+-----+---------+----------------+
| id                 | int(11)      | NO   | PRI | NULL    | auto_increment |
| bt50_id            | int(11)      | YES  | MUL | NULL    |                |
| type               | varchar(10)  | YES  |     | NULL    |                |
| title              | varchar(255) | YES  |     | NULL    |                |
| official_title     | text         | YES  |     | NULL    |                |
| summary            | text         | YES  |     | NULL    |                |
| congresscritter_id | int(11)      | NO   | MUL | NULL    |                |
| last_action        | datetime     | YES  |     | NULL    |                |
| sunlight_id        | varchar(45)  | YES  |     | NULL    |                |
| number             | int(11)      | YES  |     | NULL    |                |
| state              | char(2)      | YES  |     | NULL    |                |
| chamber            | varchar(45)  | YES  |     | NULL    |                |
| session            | varchar(45)  | YES  |     | NULL    |                |
| featured           | tinyint(1)   | YES  |     | 0       |                |
| source_url         | varchar(255) | YES  |     |         |                |
+--------------------+--------------+------+-----+---------+----------------+

最佳答案

我似乎已经解决了这个问题,尽管我承认这完全是运气不好,所以它可能不是根本原因:

首先,我想它可能不喜欢查询中字段的顺序,我只有最后一个属性字段,所以我决定将其移到 ID 之后:

 SELECT id, UNIX_TIMESTAMP(last_action) AS bill_date, \
     title,official_title,summary,state,chamber, FROM bill

这并没有解决问题。

其次,我注意到所有示例日期字段都使用 UNIX_TIMESTAMP 进行转换,然后别名为相同的名称,因此我更改了它,而不是 UNIX_TIMESTAMP(last_action) AS bill_dateUNIX_TIMESTAMP(last_action) AS last_action ...第一次尝试让我绊倒了,因为它仍然不起作用。

最后,我完全删除了日期并成功添加了每个字段(每次都重新索引和测试)。每次它都有效,最后我在末尾添加了日期字段,并且我能够按它排序并搜索所有字段。所以最终的查询是:

    SELECT \
      id,title,official_title,summary,state,chamber, \ 
      UNIX_TIMESTAMP(last_action) AS last_action FROM bill

看来属性字段必须位于全文字段之后,并且别名必须与实际字段名称相同。我觉得很奇怪,日期字段看起来很好,但其他字段突然消失了(随机!)。

我希望这对其他人有帮助,尽管我觉得这可能是某种孤立的错误,不会影响很多人。 (这是在 OSX 上,sphinx 是手工编译的)

关于php - Sphinx 搜索对某些字段建立索引,但对其他字段不建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239946/

相关文章:

php - 根据范围从收据簿中提取缺失的号码

php - 马根托。仅为分组产品创建属性

php - Paypal 沙盒 IPN : 14077410:ssl routines:ssl23_get_server_hello:sslv3 alert handshake failure

python - 掩码 RCNN : How to add region annotation based on manually segmented image?

mysql - 从 csv 导入时 mysql 出错

java - Java 中 SQL 查询不解析整个表的方法 - JDBC

php - cakephp3自定义验证

php - PDO报价方式

python - 删除每组中最后一个子组对应的行

python - 覆盖 Django 的 RelatedManager 方法