생각 나는 스핑크스 젬을 사용하고 있습니다. 쿼리를 완료하는 데 약 45 초 (인덱스가 포함 된 폴더는 1.1GB)가 소요됩니다. 내가 뭔가 잘못 구성되어 있다고 가정합니다 (처음 스핑크스 사용자). 어쨌든 저렇게 보이는 것이 있으면 저에게 알려주십시오. 여기 내 구성은 다음과 같습니다스핑크스에서 검색 시간을 줄이려는 아이디어
Location.search('Restaurant',
:geo => [0.5837843098436726,-1.9560609568879357],
:latitude_attr => "latitude",
:longitude_attr => "longitude",
:with => {"@geodist" => 0.0..4000.0},
:include => :categories,
:page => 1,
:per_page => 100)
내 로그 보여줍니다 : 나는이 문서를 통해 파고 물건을 시도하겠습니다
Sphinx Query (43066.3ms) restaurant
Sphinx Found 467 results
다음
define_index do
indexes :name
indexes :summary
indexes :tag_list
indexes categories.name, :as => :category_name
has "RADIANS(lat)", :as => :latitude, :type => :float
has "RADIANS(lng)", :as => :longitude, :type => :float
set_property :field_weights => {
:name => 8,
:summary => 6,
:category_name => 5,
:tag_list => 3
}
set_property :delta => ThinkingSphinx::Deltas::ResqueDelta
set_property :ignore_chars => %w(' -)
end
는 예를 들어 쿼리입니다!
UPDATE : 내 development.sphinx.conf
indexer
{
}
searchd
{
listen = 127.0.0.1:9312
log = /project_path/log/searchd.log
query_log = /project_path/log/searchd.query.log
pid_file = /project_path/log/searchd.development.pid
}
source location_core_0
{
type = pgsql
sql_host = localhost
sql_user = user
sql_pass = pass
sql_db = db_name
sql_query_pre = UPDATE "business_entities" SET "delta" = FALSE WHERE "delta" = TRUE
sql_query_pre = SET TIME ZONE 'UTC'
sql_query = SELECT "business_entities"."id" * 1::INT8 + 0 AS "id" , "business_entities"."name" AS "name", "business_entities"."summary" AS "summary", "business_entities"."tag_list" AS "tag_list", "business_entities"."id" AS "sphinx_internal_id", 0 AS "sphinx_deleted", CASE COALESCE("business_entities"."type", '') WHEN 'Location' THEN 2817059741 WHEN 'Group' THEN 2885774273 WHEN 'BraintreeBusiness' THEN 28779289 WHEN 'InvoicedBusiness' THEN 1440117572 ELSE 2817059741 END AS "class_crc", COALESCE("business_entities"."type", '') AS "sphinx_internal_class", RADIANS(lat) AS "latitude", RADIANS(lng) AS "longitude" FROM "business_entities" WHERE ("business_entities"."type" = 'Location') AND ("business_entities"."id" >= $start AND "business_entities"."id" <= $end AND "business_entities"."delta" = FALSE AND "business_entities"."type" = 'Location') GROUP BY "business_entities"."id", "business_entities"."name", "business_entities"."summary", "business_entities"."tag_list", "business_entities"."id", "business_entities"."type"
sql_query_range = SELECT COALESCE(MIN("id"), 1::bigint), COALESCE(MAX("id"), 1::bigint) FROM "business_entities" WHERE "business_entities"."delta" = FALSE
sql_attr_uint = sphinx_internal_id
sql_attr_uint = sphinx_deleted
sql_attr_uint = class_crc
sql_attr_float = latitude
sql_attr_float = longitude
sql_attr_string = sphinx_internal_class
sql_query_info = SELECT * FROM "business_entities" WHERE "id" = (($id - 0)/1)
}
index location_core
{
source = location_core_0
path = /project_path/db/sphinx/development/location_core
morphology = stem_en
charset_type = utf-8
ignore_chars = ', -
enable_star = 1
}
source location_delta_0 : location_core_0
{
type = pgsql
sql_host = localhost
sql_user = user
sql_pass = pass
sql_db = db_name
sql_query_pre =
sql_query_pre = SET TIME ZONE 'UTC'
sql_query = SELECT "business_entities"."id" * 1::INT8 + 0 AS "id" , "business_entities"."name" AS "name", "business_entities"."summary" AS "summary", "business_entities"."tag_list" AS "tag_list", "business_entities"."id" AS "sphinx_internal_id", 0 AS "sphinx_deleted", CASE COALESCE("business_entities"."type", '') WHEN 'Location' THEN 2817059741 WHEN 'Group' THEN 2885774273 WHEN 'BraintreeBusiness' THEN 28779289 WHEN 'InvoicedBusiness' THEN 1440117572 ELSE 2817059741 END AS "class_crc", COALESCE("business_entities"."type", '') AS "sphinx_internal_class", RADIANS(lat) AS "latitude", RADIANS(lng) AS "longitude" FROM "business_entities" WHERE ("business_entities"."type" = 'Location') AND ("business_entities"."id" >= $start AND "business_entities"."id" <= $end AND "business_entities"."delta" = TRUE AND "business_entities"."type" = 'Location') GROUP BY "business_entities"."id", "business_entities"."name", "business_entities"."summary", "business_entities"."tag_list", "business_entities"."id", "business_entities"."type"
sql_query_range = SELECT COALESCE(MIN("id"), 1::bigint), COALESCE(MAX("id"), 1::bigint) FROM "business_entities" WHERE "business_entities"."delta" = TRUE
sql_attr_uint = sphinx_internal_id
sql_attr_uint = sphinx_deleted
sql_attr_uint = class_crc
sql_attr_float = latitude
sql_attr_float = longitude
sql_attr_string = sphinx_internal_class
sql_query_info = SELECT * FROM "business_entities" WHERE "id" = (($id - 0)/1)
}
index location_delta : location_core
{
source = location_delta_0
path = /project_path/db/sphinx/development/location_delta
}
index location
{
type = distributed
local = location_delta
local = location_core
}
당신이 여기 sphinx.conf을 게시하시기 바랍니다 수 : 나는 걱정 입력합니다. –
구성 파일을 게시하는 경우 데이터베이스에서 자격 증명 정보 (사용자 이름 및 암호)를 제거해야합니다. – pat
ok, 게시 내 development.sphinx.conf –