Как оптимизировать MySQL полный матч - PullRequest
0 голосов
/ 22 декабря 2009

Эй, ребята, вы знаете какой-то трюк о том, как я могу оптимизировать поиск по полному совпадению?

Код, который я пытаюсь оптимизировать:

$do = $this->select()
      ->where('MATCH(`name`,`ort`) AGAINST( ? IN BOOLEAN MODE)', $theString)
      ->order('premium DESC');

Поиск должен искать некоторые компании ... и скажем, что в поле name у меня есть: Google и в поле ort у меня есть Нью-Йорк .

Я хочу сделать запрос вроде: Google Center в Нью-Йорке и в результате дать мне все Google-центры только из Нью-Йорка!

Надеюсь, вы понимаете, о чем я!

Ответы [ 3 ]

1 голос
/ 22 декабря 2009

Ваш тип запроса может быть лучше сопоставлен полнотекстовым поиском в NATURAL LANGUAGE MODE вместо BOOLEAN MODE.

Если вы ищете "Google Center в Нью-Йорке" в логическом режиме, вы найдете любые совпадения всех этих ключевых слов, но не обязательно в том порядке или в соответствии с этими понятиями.

1 голос
/ 22 декабря 2009

используйте релевантность для сортировки

$do = $this->select("*, MATCH(`name`,`ort`) AGAINST ('{$theString}') AS score")
      ->where('MATCH(`name`,`ort`) AGAINST( ? IN BOOLEAN MODE)', $theString)
      ->order('premium DESC, score');
1 голос
/ 22 декабря 2009
...