나는 다음과 같은 상황이있다 : DB ~ 116G ~ 800 만. 두 번째 열 등 \ #, %, 난 단지/러시아어, 영어 문자와 숫자로 검색을 구성하려면 같은/러시아어, 영어 문자와 단어, 숫자, 특수 문자를 포함 할 수 있습니다스핑크스와 PHP 통합. 낮은 성능
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`key` varchar(256) NOT NULL,
PRIMARY KEY (`id`),
KEY `key` (`key`(255)) USING BTREE
: 다음 구조 행 .
스핑크스 구성 :
source keywords
{
sql_query_pre = SET NAMES utf8
sql_query = \
SELECT * \
FROM keywords
sql_query_info = SELECT * FROM keywords WHERE id=$id
}
index keywords
{
source = keywords
docinfo = extern
dict = keywords
mlock = 0
min_stemming_len = 1
min_word_len = 1
charset_type = utf-8
charset_table = U+0030..U+0039, U+0041..U+005A, U+0061..U+007A, U+0410..U+044F
ignore_chars = U+0021..U+0029, U+003A..U+0040, U+005B..U+0060, U+007B..U+040F, U+0450..U+2FFFF
min_prefix_len = 1
enable_star = 1
html_strip = 0
}
indexer
{
mem_limit = 1024M
}
searchd
{
client_timeout = 300
max_children = 30
max_matches = 1000000
max_packet_size = 8M
max_batch_queries = 32
}
PHP 구성 :
$oCl->SetMatchMode(SPH_MATCH_PHRASE);
$oCl->SetLimits(0, $iLimit);
$sQueryForSphinx = implode('* ', explode(' ', $oCl->EscapeString($sQuery))) . '*';
$aResult = $oCl->Query('" ' . $sQueryForSphinx . ' "');
나는 다음 검색 알고리즘을 제공 할
: $ 쿼리에서 내가 사용자 데이터를 가지고있다. 러시아어/영어 문자와 숫자가 공백으로 구분 된 단어 만있을 수 있습니다. 최소 단어 길이는 1입니다. 최소 단어 수는 1이고 최대 문자 수는 3입니다. 사용자가 입력 한 순서와 동일한 순서로이 단어가 포함 된 데이터베이스의 모든 키를 찾고 싶습니다. 또한 모든 단어에는 단어 끝에 추가 기호가 포함될 수 있습니다.
예 : 사용자 입력 : TES 테스트 TEST1은 : 다음 문구를 포함하는 키를 반환해야합니다 : 등, "TEST1 test12 test124", "테스트 TEST1의 test12"을 "TES 테스트 TEST1"을
이 구성 작품 4 개의 기호보다 큰 길이의 단어로 완벽하게. 검색 시간이 5 초 미만입니다.
내 문제는 길이가 4 자 미만인 단어 (예 : "te t test")가 포함 된 구를 입력하면 스핑크스가 매우 느리게 약 1 분 이상 작동한다는 것입니다.
이 문제를 어떻게 해결할 수 있습니까?
대단히 감사합니다. 이제 완벽하게 작동합니다. – Sergey
관심이 있으시면 지금 어떤 종류의 성과를 얻으십니까? 예를 들어 4 글자 단어는 dict = 키워드로 5 초가됩니다. dict = crc과 동일한 검색어는 어떨까요? – barryhunter
안녕하십니까, 세 개의 러시아어 단일 문자 "м нт"~ 12 초, 한 글자 "1"(예 : 2 초) . 내가 길이가 긴 문구를 찾으려고 할 때 99 %의 시간에 2 개의 기호가 $ iMaxResults = 1000 인 경우 1 초 (평균 0.4 초)가됩니다. 나를 위해 그것은 예상대로 완벽하게 작동합니다. 이제 데이터 폴더는 ~ 109GB이며, keywords.spd ~ 103GB 및 keywords.serp ~ 2GB입니다. – Sergey