真的 有时 你不得不佩服人类
最近 因为 hometown
项目需要
然后开始查找 分词
然后 就佩服起来了人类
就佩服起来了这些厉害的大神
然后 就有了 jieba-api 这个项目
然后 我就遇到了查询中的问题了
因为这是一个 ucg
平台
所以 这个 搜索
显得格外的重要
然后 这个是可以选择位置 再加 内容的
所以 数据表就设计成了
user
content
1 2 3 4 5 6 7 8
| id title 标题 body 内容 province 省份 city 城市 area 区域 address 地址 user_id 用户ID
|
然后 搜索要可以通过
这些条件 联合查询
按照 词性标注
可以完成一部分
用返回的 名词
去 内容标题
用返回的 地名
去 内容 省份 城市 区域 地址
如果没有返回 名词
地名
就去关联 用户表
的 昵称
查询
经过一系列的操作
就导致了
西安肉夹馍
可以在 位置为西安
搜索 标题含有肉夹馍
的数据
天旭流年
可以查出来 用户昵称为 天旭流年
发布的数据
然后 这时候 就有了一个
天旭流年 肉夹馍
按道理说 应该去查这个用户发布标题中含有 肉夹馍
的数据
可是这
看来我这样搜索是不对的
可我觉得又不能用一堆 if
判断
先记个 todo
上线后优化吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| $ns = $participle['ns'] ?? null; if ($ns) { $db->where(function ($query) use ($ns) { foreach ([ 'province', 'city', 'area', 'address', ] as $name) { foreach ($ns as $value) { $query->orWhere($name, 'like', "$value%"); } } }); }
$n = $participle['n'] ?? null; if ($n) { $db->where(function ($query) use ($n) { foreach ([ 'title', ] as $name) { foreach ($n as $value) { $query->orWhere($name, 'like', "$value%"); } } }); }
$author_ids = User::search('nickname', $content)->pluck('id'); if ($author_ids) { if ($ns || $n) { $db->orWhereIn('author_id', $author_ids); } else { $db->whereIn('author_id', $author_ids); } }
|
下一个 应该是 推荐感悟