本文介紹了帶過濾功能的Spinx搜索查詢的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問題描述
我需要按POST_CATEGORY_NAME(字符串值)列在Spinx查詢中添加額外的篩選,
我的當(dāng)前索引:
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
}
我有3個(gè)表:POST、LOCATION和POST_CATEGORY
我的數(shù)據(jù)庫(kù)關(guān)系:1)發(fā)布位置一對(duì)一,
2)帶有POST_CATEGORY的帖子是一對(duì)多。
POST_CATEGORY表,此表只有兩列:POST_ID和POST_CATEGORY_NAME列,當(dāng)此表中的POST_ID按距離映射時(shí),我需要按此POST_CATEGORY_NAME進(jìn)行搜索。
我用這樣的查詢按位置過濾,它工作得很好:
select *, geodist(48.712002, 2.677411, latitude, longitude) dist from serv1 where match('searchText*') and dist < 20 ;
在我的SELECT查詢之后,我希望在結(jié)果中包含以下列:
|id|緯度|經(jīng)度|POST_CATEGORY_NAME|dist
并按POST_CATEGORY_NAME篩選。
所以當(dāng)我搜索時(shí),我需要這樣的內(nèi)容:
select *, geodist(48.712002, 2.677411, latitude, longitude) dist from serv1 where match('searchText*') and dist < 20 and post_category_name in ("All", "Shop");
請(qǐng)幫幫我。
推薦答案
因?yàn)槊總€(gè)帖子(可能)有多個(gè)類別,所以必須選擇如何編制索引。1)可以保持現(xiàn)在的狀態(tài),并且每個(gè)帖子都有獅身人面像文檔,如果帖子在多個(gè)類別中,那么POST_CATEGORY_NAME實(shí)際上將包含多個(gè)值。
.或者2)可以改為每個(gè)帖子類別有一個(gè)文檔。因此,如果一個(gè)文檔屬于多個(gè)類別,則可能會(huì)有多個(gè)結(jié)果。
選項(xiàng)1更簡(jiǎn)單,但選項(xiàng)2最終會(huì)更靈活(可以組合搜索,也可以不組合搜索,但您的獅身人面像查詢可能需要一個(gè)GROUP BY TO,以獲得每個(gè)帖子一個(gè)結(jié)果)
但目前的選項(xiàng)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
.將類別同時(shí)作為字符串屬性(用于檢索)和字段(用于匹配)
select id, post_category_name , geodist(48.712002, 2.677411, latitude, longitude) dist
from serv1
where match('searchText* @post_category_name All|Shop') and dist < 20;
雖然您可以在WHERE中使用POST_CATEGORY_NAME屬性,但如果可以使用全文查詢(字段)進(jìn)行篩選,通常會(huì)更好。
這篇關(guān)于帶過濾功能的Spinx搜索查詢的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,