범위의 입력에서 예상치 못한 결과가 산출 스핑크스 범위 생각 :내가이 sphinx_scope에서 복제를 시도하고 활성 기록 범위가
scope :active, -> (date) { where("DATE(?) BETWEEN active_date AND hide_date-1 ", date) } # between is inclusive
이 누군가가 나에게 더 잘 보여줄 수없는 한, 정부의 작업에 충분히 가까이입니다 방법 :
sphinx_scope(:search_active) { |today|
{:with => {:active_date => 100.years.ago.to_i..today.to_s.to_time.to_i, :hide_date => today.to_s.to_time.to_i..100.years.from_now.to_i}
}
가 (예, today.to_s.to_time.to_i 조금 어색가 ...)
내 문제는 결과가 정확하지 않는 것이다. 예를 들어, 범위가없는 쿼리
sphinxQL> SELECT weight(),* FROM `standard_core` WHERE MATCH('1910.15') AND `sphinx_deleted` = 0 LIMIT 0, 10 OPTION field_weights=(section_number=2);
+----------+------+----------------+--------------------+-------------+-----------+------------+------------+-----------------------+-----------------------------------------------------------------------------------+---------------------+
| weight() | id | sphinx_deleted | sphinx_internal_id | active_date | hide_date | created_at | updated_at | sphinx_internal_class | title_sort | section_number_sort |
+----------+------+----------------+--------------------+-------------+-----------+------------+------------+-----------------------+-----------------------------------------------------------------------------------+---------------------+
| 8557 | 3633 | 0 | 908 | 1436936400 | 297642704 | 1451164539 | 1451164539 | Standard | § 1910.15 Shipyard employment. | 1910.15 |
| 6549 | 3637 | 0 | 909 | 1436936400 | 297642704 | 1451164539 | 1451164539 | Standard | § 1910.15(a) Adoption and extension of established safety and health... | 1910.15(a) |
| 6549 | 3641 | 0 | 910 | 1436936400 | 297642704 | 1451164539 | 1451164539 | Standard | § 1910.15(b) Definitions. For purposes of this section: | 1910.15(b) |
를 산출하지만 범위와 가장 관련성이 높은 결과가 누락 :
는sphinxQL> SELECT weight() as weight,* FROM `standard_core` WHERE MATCH('1910.15') AND `active_date` BETWEEN -1672108252 AND 1482127200 AND `hide_date` BETWEEN 1482127200 AND 4639325348 AND `sphinx_deleted` = 0 ORDER BY weight DESC LIMIT 0, 10 OPTION field_weights=(section_number=2);
+--------+------+----------------+--------------------+-------------+------------+------------+------------+-----------------------+-----------------------------------------------------------------------------------+---------------------+
| weight | id | sphinx_deleted | sphinx_internal_id | active_date | hide_date | created_at | updated_at | sphinx_internal_class | title_sort | section_number_sort |
+--------+------+----------------+--------------------+-------------+------------+------------+------------+-----------------------+-----------------------------------------------------------------------------------+---------------------+
| 4566 | 5469 | 0 | 1367 | 1436936400 | 1484632800 | 1451167759 | 1451167759 | Standard | § 1910.27(d)(1)(vi) Ladder wells shall have a clear width of at least 15... | 1910.27(d)(1)(vi) |
| 4549 | 5413 | 0 | 1353 | 1436936400 | 1484632800 | 1451167757 | 1451167757 | Standard | § 1910.27(c)(2) Ladders without cages or wells. A clear width of at least 15... | 1910.27(c)(2) |
| 4549 | 5453 | 0 | 1363 | 1436936400 | 1484632800 | 1451167758 | 1451167758 | Standard | § 1910.27(d)(1)(ii) Cages or wells (except as provided in subparagraph (5) of... | 1910.27(d)(1)(ii) |
나는이 실제로 생각 스핑크스 오류가 있다고 생각하지만, 오히려하지 않습니다 스핑크스 그 자체가있는 것. 또는, 아마도 ... 내가 오해하고있는 것 : p
여기에 무슨 일이 일어나고 있는지 조명 해줄 사람이 있습니까?
[편집] ------------------------------------------- --------------
@DGM을 사용하면 hide_date 값이 sphinx 데이터베이스 레코드에서 올바르지 않다는 것을 발견했습니다. 레코드 ID 3633의 경우, mysql 데이터베이스 레코드 908의 날짜 값은 2115-07-15입니다.
'2115-07-15'.to_time.to_i
=> 4592610000
분명 297642704
및 4592610000
간의 불일치의 비트가있다.
그래서 범위를 잘못 이해하고 있거나 스핑크스 데이터베이스에 오류가 있습니다.
인덱스/standard_index.rb
ThinkingSphinx::Index.define :standard, :with => :real_time do
# fields
indexes title, :sortable => true
indexes content
indexes section_number, :sortable => true
# attributes
has active_date, :type => :timestamp
has hide_date, :type => :timestamp
has created_at, :type => :timestamp
has updated_at, :type => :timestamp
end
하는 MySQL의 날짜 필드와 스핑크스 타임 스탬프 사이의 번역이 잃고 무엇인가?
좋은 해결 방법! 따라서 ** 문제 해결이 훨씬 쉬워졌습니다. mysql'date' 필드를 사용하고 있습니다 만, 모델에있는 문자열이어야합니다. 나는 대부분의 형식에서 실패하기 때문에 정렬을위한 문자열로 날짜를 사용하지 않으려 고하기 때문에 오히려 즐겁다. 그러나이 경우에는 솔루션의 일부이다. –
Rails와 TS/Riddle 둘 다 Date 인스턴스로 처리해야한다는 점에 조금 놀랍습니다. 그럼에도 불구하고 이것은 의미있는 일이 예상대로 진행되고 있습니까? – pat
정수로 변환하면 예상대로 작동하고 이해하기 쉽습니다. 윈 - 윈. 무슨 hinky 갔는지 잘 모르지만,이 잘 작동합니다 :) –