индексирование даты и времени в сфинксе - PullRequest
0 голосов
/ 09 мая 2018

В моей базе данных есть несколько полей даты и времени, и я хочу выполнить поиск по этим полям. В sphinx есть свойство sql_attr_timestamp, которое не индексирует данные и предназначено только для фильтрации, а также применяется только к исходным типам SQL (mysql, pgsql, mssql). Итак, есть ли способ индексирования полей даты и времени (или компонента даты) в sphinx?

1 Ответ

0 голосов
/ 09 мая 2018

Полнотекстовая часть запроса Sphinx не является обязательной, то есть вы можете пропустить ее и выполнять запросы, например:

select * from idx where published = ...

или

select * from idx where inserted > ...

Если вы используете SphinxAPI, вы можете просто сделать свой запрос пустым, что поможет. Другой прием, который может иметь смысл в некоторых случаях, - это поместить ваши значения времени в полнотекстовое поле, а не в атрибут (для этого просто НЕ нужно указывать sql_attr_timestamp). Это может повысить производительность в некоторых случаях (например, когда у вас много документов, но только немногие из них соответствуют критериям). В этом случае подумайте:

  • как значение времени будет размечено в поле FT, возможно, вы будете необходимо сделать YYYYMMDD вместо YYYY-MM-DD, чтобы убедиться, что он остается одно слово
  • хотите ли вы, чтобы он совпадал непреднамеренно при использовании запрос, который использует все ваши поля, если вы не можете обернуть его в некоторый специальный префикс / суффикс, например ГГГГ-ММ-ДД станет
    dtYYYYMMDDdt и тогда вероятность того, что кто-то найдет его, намного ниже чем когда это просто ГГГГММДД или ГГГГ-ММ-ДД (если - это разделитель)
...