gpt4 book ai didi

java - 带过滤功能的 Spinx 搜索查询

转载 作者:行者123 更新时间:2023-11-29 17:48:14 26 4
gpt4 key购买 nike

我需要通过 post_category_name(String value) 列在 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
}

我有 3 个表:post、location 和 post_category我的数据库关系:1)与位置一对一地发布, 2) 带有 post_category 的帖子是一对多。

post_category 表,该表只有两列:post_id 和 post_category_name 列,当该表中的 post_id 距离很远时,我需要按此 post_category_name 进行搜索。

我使用这样的查询按位置进行过滤,效果很好:

select *, geodist(48.712002, 2.677411, latitude, longitude) dist from serv1  where match('searchText*') and dist < 20 ;

在我的选择查询之后,我希望在结果中包含这样的列:

|编号 |纬度 |经度 |帖子类别名称 |距离

并按 post_category_name 进行过滤。

所以当我搜索时我需要这样的东西:

 select *, geodist(48.712002, 2.677411, latitude, longitude) dist from serv1  where match('searchText*') and dist < 20 and post_category_name in ("All", "Shop");

请帮帮我。

最佳答案

由于每个帖子(可能)有多个类别,因此必须选择如何建立索引。 1)可以像现在一样保留它,并且每个帖子都有sphinx文档,然后如果帖子在多个类别中,则post_category_name实际上将包含多个值。

...或 2) 可以改为每个帖子和类别一个文档。因此,如果文档属于多个类别,则可能会出现多个结果。

<小时/>

选项 1 更简单,但选项 2 最终会更灵活(可以组合搜索也可以不组合搜索,但您的 sphinx 查询可能需要 GROUP BY 才能为每个帖子获取一个结果)

但目前选择 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(48.712002, 2.677411, latitude, longitude) dist 
from serv1
where match('searchText* @post_category_name All|Shop') and dist < 20;

虽然您可以在 WHERE 中使用 post_category_name 属性,但如果可以使用全文查询(字段)进行过滤,通常会更好。

关于java - 带过滤功能的 Spinx 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624670/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com