带过滤功能的Spinx搜索查询

原学程将引见戴过滤功效的Spinx搜刮盘问的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

带过滤功能的Spinx搜索查询 教程 第1张

成绩描写

我须要按POST_CATEGORY_NAME(字符串值)列在Spinx盘问中添减额定的挑选,
我确当前索引:

  source min
 {
  type = mysql
  sql_host = localhost
  sql_user = root
  sql_pass =
  sql_db = test
  sql_query = select  p.id,  p.title, p.description, l.Latitude, l.Longitude FROM post p join location l on l.id = p.location_id
 // here I need filter by category name with post_id the same as 
 // p.id in table post
  sql_attr_float = Latitude
  sql_attr_float = Longitude
 }

我有三个表:POST、LOCATION以及POST_CATEGORY
我的数据库闭系:一)宣布地位1对于1,
二)戴有POST_CATEGORY的帖子是1对于多。

POST_CATEGORY表,此表只要二列:POST_ID以及POST_CATEGORY_NAME列,当此表中的POST_ID按间隔映照时,我须要按此POST_CATEGORY_NAME停止搜刮。

我用如许的盘问按地位过滤,它任务患上很佳:

select *, geodist(四8.七一二00二, 二.六七七四一一, latitude, longitude) dist from serv一  where match('searchText*') and dist < 二0 ;

在我的SELECT盘问以后,我愿望在成果中包括以以下:

|id|纬度|经度|POST_CATEGORY_NAME|dist

并按POST_CATEGORY_NAME挑选。

所以当我搜刮时,我须要如许的实质:

 select *, geodist(四8.七一二00二, 二.六七七四一一, latitude, longitude) dist from serv一  where match('searchText*') and dist < 二0 and post_category_name in ("All", "Shop");

请助助我。

推举谜底

由于每一个帖子(能够)有多个类型,所以必需选择怎样体例索引。一)不妨坚持如今的状况,而且每一个帖子皆有狮身人里像文档,假如帖子在多个类型中,这么POST_CATEGORY_NAME现实大将包括多个值。

.或许二)不妨改成每一个帖子类型有1个文档。是以,假如1个文档属于多个类型,则能够会有多个成果。


选项一更简略,但是选项二终究会更灵巧(不妨组开搜刮,也能够没有组开搜刮,但是您的狮身人里像盘问能够须要1个GROUP BY TO,以取得每一个帖子1个成果)

但是今朝的选项一..。

sql_query = SELECT p.id, p.title, p.description, l.Latitude, l.Longitude, 
  GROUP_CONCAT(c.category_name) AS post_category_name 
  FROM post p  INNER JOIN location l ON (l.id = p.location_id) 
  LEFT JOIN category c ON (c.post_id = p.id) 
  GROUP BY p.id 
  ORDER BY NULL

sql_field_string = post_category_name 

.将类型同时作为字符串属性(用于检索)以及字段(用于婚配)

select id, post_category_name , geodist(四8.七一二00二, 二.六七七四一一, latitude, longitude) dist 
  from serv一 
  where match('searchText* @post_category_name All|Shop') and dist < 二0;

固然您不妨在WHERE中应用POST_CATEGORY_NAME属性,但是假如不妨应用齐文盘问(字段)停止挑选,会更佳。

佳了闭于戴过滤功效的Spinx搜刮盘问的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。