Datetime 斯芬克斯中的索引日期时间

Datetime 斯芬克斯中的索引日期时间,datetime,indexing,sphinx,Datetime,Indexing,Sphinx,我的数据库中有一些datetime字段,我想搜索这些字段。sphinx中有一个sql_attr_timestamp属性,它不是索引数据,只是用于过滤,也仅适用于sql源类型(mysql、pgsql、mssql)。那么,有没有一种方法可以为sphinx中的datetime字段(或日期的组成部分)编制索引?sphinx查询的全文部分不是必需的,即您可以跳过它并进行如下查询: select * from idx where published = ... 或 如果使用SphinxAPI,只需将查询设

我的数据库中有一些datetime字段,我想搜索这些字段。sphinx中有一个sql_attr_timestamp属性,它不是索引数据,只是用于过滤,也仅适用于sql源类型(mysql、pgsql、mssql)。那么,有没有一种方法可以为sphinx中的datetime字段(或日期的组成部分)编制索引?

sphinx查询的全文部分不是必需的,即您可以跳过它并进行如下查询:

select * from idx where published = ...

如果使用SphinxAPI,只需将查询设为空即可。 另一个在某些情况下可能有意义的技巧是将时间值放入全文字段而不是属性中(使用时只需不为此指定sql\u attr\u timestamp)。在某些情况下,这可能会提高性能(例如,当您有大量文档,但只有少数文档符合标准时)。 在这种情况下,请考虑:

  • 时间值将如何在FT字段中标记,也许您会这样做 需要将YYYYMMDD改为YYYY-MM-DD以确保它仍然是 单字
  • 是否希望在使用 使用所有字段的查询,如果不使用,可以将其包装在 一些特殊的前缀/后缀,例如YYYY-MM-DD将变成
    DTYYYYMMDDT,那么有人发现它的几率要低得多 而不仅仅是YYYYMMDD或YYYY-MM-DD(如果-是分隔符)

我不明白你说的跳绳。我使用sphinxql。我应该跳过什么?您的意思是跳过查询中的匹配(“…”)短语吗?那么,在这种情况下,我可以利用全文搜索吗?是的,没错,跳过匹配()。如果你想利用全文搜索的优势,即反向索引的优势,请阅读我答案的第二部分,正是关于这一点。如果只是跳过它,它将执行完全扫描,但由于属性保存在内存中,因此在大多数情况下它也应该很快,所以在执行DTYYYYMMDDT之类的攻击之前,请尝试一下
select * from idx where inserted > ...