저는 UTF-8 문서가있는 스핑크스 색인, 특히 아티스트의 이름이 있습니다. 여러 가지 이유로 필드 (indexed_name)와 속성 (name)으로 이름이 있습니다. 나는 문서를 검색 할 때, 나는 제대로 찾을 수 있지만, 속성은 손상된 반환되는 :UTF-8 문자열 속성이있는 스핑크스
그것은 속성처럼 보이는mysql> select name from artist where match('@indexed_name Sánchez') limit 3;
+---------+--------+-----------------------+
| id | weight | name |
+---------+--------+-----------------------+
| 7843884 | 2642 | Sarita Sánchez |
| 8519538 | 2642 | Cristhian Sánchez |
| 3853986 | 2627 | Alfonso Sánchez |
+---------+--------+-----------------------+
3 rows in set (0.02 sec)
원래했다 UTF-8 만 ISO-8859-1로 처리 한 후 다시 변환 UTF-8로
[1] pry(main)> rs = Thebes::Sphinxql::Query.run("select name from artist where match('@indexed_name Sánchez')")
=> #<Mysql2::Result:0x000000029bebf8 (omitted...)
[2] pry(main)> name = rs.first['name']
=> "Sarita SÃ\u0083¡nchez"
이 스핑크스의 버그, 아니면 내가 뭔가 잘못하고있는 중이 야 : 나는 루비에서이 작업을 수행 할 때 그것을 통해 두 번째로 간다처럼, 그것은 본다?
나는 ISO-8859-1 및 UTF-8를 통해 순환하여 되돌릴 수 :
[4] pry(main)> name.encode!("ISO-8859-1")
=> "Sarita S\xC3\x83\xC2\xA1nchez"
[5] pry(main)> name.force_encoding("UTF-8")
=> "Sarita Sánchez"
[6] pry(main)> name.encode!("ISO-8859-1")
=> "Sarita S\xC3\xA1nchez"
[7] pry(main)> name.force_encoding("UTF-8")
=> "Sarita Sánchez"
가는 다른 ISO-8859- * 문자 집합 및 대한 문자하지만, 일인가요 합법적으로 유니 코드가 필요한 것들?
업데이트 1 :
두 번째 질문에 대한 대답은 전혀 없습니다. 터키어 이름을 검색 : ". YİĞİT하기 Ozdemir"
mysql> select name from artist where match('@indexed_name ÖZDEMİR') limit 3;
+---------+--------+-------------------------------+
| id | weight | name |
+---------+--------+-------------------------------+
| 1753230 | 2664 | Nurullah Alper ÖZDEMİR |
| 6973956 | 2664 | YİĞİT ÖZDEMİR |
| 9133770 | 2664 | TAHA ÖZDEMİR |
+---------+--------+-------------------------------+
3 rows in set (0.01 sec)
이가 있어야하는데 두 번째 내가하지 않으려는
:
[2] pry(main)> rs = Thebes::Sphinxql::Query.run("select name from artist where match('@indexed_name ÖZDEMİR') limit 3")
=> #<Mysql2::Result:0x000000047779b0...
[5] pry(main)> name = rs.to_a[1]['name'].dup
=> "YÃ\u0084°Ã\u0084žÃ\u0084°T Ã\u0083â\u0080\u0093ZDEMÃ\u0084°R"
[6] pry(main)> name.encode!("ISO-8859-1")
=> "Y\xC3\x84\xC2\xB0\xC3\x84\xC5\xBE\xC3\x84\xC2\xB0T \xC3\x83\xE2\x80\x93ZDEM\xC3\x84\xC2\xB0R"
[7] pry(main)> name.force_encoding("UTF-8")
=> "YİĞİT ÖZDEMİR"
[8] pry(main)> name.encode!("ISO-8859-1")
Encoding::UndefinedConversionError: U+017E from UTF-8 to ISO-8859-1
from (pry):8:in `encode!'
나는 ...
업데이트 2 Ö가 다섯 바이트 폭 것으로 보인다 A-,에있는 걸까요 됐는지 모르겠어요 내 모든 sphinx.conf를 게시하십시오. 여기에 여기에 사용되는 색인의 설정이 있습니다. 그것은 Thinking Sphinx에 의해 생성됩니다.
source artist_core_0
{
type = mysql
sql_host = (omitted)
sql_user = (omitted)
sql_pass = (omitted)
sql_db = (omitted)
sql_query_pre = SET NAMES utf8
sql_query_pre = SET TIME_ZONE = '+0:00'
sql_query = (omitted)
sql_query_range = SELECT IFNULL(MIN(`id`), 1), IFNULL(MAX(`id`), 1) FROM `artists`
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_attr_string = name
sql_attr_string = homepage
sql_attr_string = image
sql_attr_string = city
sql_attr_string = state
sql_attr_string = postal_code
sql_attr_string = country
sql_query_info = SELECT * FROM `artists` WHERE `id` = (($id - 0)/6)
}
index artist_core
{
source = artist_core_0
path = (omitted)
morphology = libstemmer_en, libstemmer_fr, libstemmer_tr, libstemmer_es, libstemmer_de, libstemmer_it
charset_type = utf-8
min_prefix_len = 3
enable_star = 1
}
index artist
{
type = distributed
local = artist_core
}
sphinx.conf를 첨부 할 수 있습니까? –