Пользователь вводит в поле samsung note
ему выдается список из списка 7 возможных устройств.
Как заставить его индексировать вот такие штуки Samsung note
10.1 n8020
По запросу Samsung note 10. находит, но если сделать запрос по Samsung note 10.1 то выдаст результат 0
ps использую в запросах звездочки, может поэтому?
Конфиг
source dev_mobile :dev_config {
sql_query = \
SELECT * FROM mobiles
sql_field_string = vendor
sql_field_string = name
}
index dev_mobile
{
source = dev_mobile
path = /var/lib/sphinx/data/dev_mobile
charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
min_word_len = 1
html_strip = 1
min_infix_len = 3
index_exact_words = 1
blend_chars = &,U+23
morphology = lemmatize_en
#morphology = stem_en
#morphology = stem_enru, soundex, metaphone
}
Запрос SphinxQL в php у меня в виде метода в модели (yii1.5)
/**
* Поиск устройства
* @param $query
* @param int $offset
* @param int $limit
* @return array|null
*/
public function searchSphinx($query , $offset = 0, $limit = 30)
{
/**
* @var CDbConnection $sphinx
*/
$sphinx = Yii::app()->sphinx;
$sql = "SELECT id, weight() FROM dev_mobile WHERE MATCH(".$sphinx->quoteValue('@(name,vendor) '.$query.'*').")";
$sql.= " LIMIT $offset,$limit ";
$sql.= " OPTION field_weights=(name=10,vendor=11), max_matches=10000, ranker=expr('sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25');";
$result = $sphinx->createCommand($sql)->queryAll();
$ids = array_map(function($element){return $element['id'];}, $result);
$arr_info = $sphinx->createCommand('show meta')->queryAll();
$data_info = array();
foreach($arr_info as $info)
{
$data_info[ $info['Variable_name'] ] = $info['Value'];
}
if(! count($ids)) return null;
$criteria = new CDbCriteria;
$criteria->condition = 't.id IN('.implode(',',$ids).')';
$criteria->order = 'FIELD(t.id, '.implode(',',$ids).')';
return array(
'data' => self::model()->with('system')->findAll($criteria),
'info' => $data_info
);
}