找回密码
 快速注册
搜索
查看: 176|回复: 18

关于搜索

[复制链接]

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

kuing 发表于 2022-6-10 15:15 |阅读模式
如果直接在上方搜索条里输入内容再点那个放大镜,那只是搜索标题。

要搜索全文,需进入高级搜索,现已在放大镜右边增加“高级搜索”的链接,方便进入。

830

主题

4862

回帖

3万

积分

积分
36159

显示全部楼层

isee 发表于 2022-6-10 16:34

{:call:}

isee=freeMaths@知乎

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2022-6-10 16:42


call 这个表情被我删了 新增了一些表情 (如果表情列表里还没出现,可以清理一下缓存)

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-9-22 01:03

建议允许搜索加号

本帖最后由 hbghlyj 于 2022-12-23 00:31 编辑 建议去除/source/module/search/search_forum.php第93行
  1. $keyword = $keyword != '' ? str_replace('+', ' ', $keyword) : '';
复制代码

应该就可以搜索加号了

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-12-23 06:50

目前搜索中的\号无效

搜索会自动去除\号, 搜索标题含“\ss”的帖子 和 搜索标题含“ss”的帖子 的结果相同
但是照样按照未去除\号的关键词来标红, 导致左图中关键词不会被标红:
结果: 找到 “\ss” 相关内容 30 个
关键词无标红
结果: 找到 “ss” 相关内容 30 个
关键词有标红
Screenshot 2022-12-22 at 22-56-13 搜索 - 悠闲数学娱乐论坛(第3版) - Powered by Discuz!.png Screenshot 2022-12-22 at 22-57-09 搜索 - 悠闲数学娱乐论坛(第3版) - Powered by Discuz!.png


如果关键词全都是\号,那么搜不到结果:

结果: 找到 “\” 相关内容 0 个

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2022-12-25 15:06

搜索自动去除\号导致搜不出来

没有办法搜索“{\alpha}”或者“1+\alpha”这样的关键词
因为它们被自动去除\号变为“{alpha}”或者“1+alpha”
导致搜不出来真正包含“{\alpha}”或者“1+\alpha”的帖子
例子:
“{\alpha}”去除\变为“{alpha}”结果可以搜到主题只有 1 个 Screenshot 2022-12-25 at 07-04-54 搜索 - 悠闲数学娱乐论坛(第3版) - Powered by Discuz!.png
可以看到该主题实际上包含“{alpha}”而不是包含“{\alpha}” Screenshot 2022-12-25 at 07-07-14 搜索 - 悠闲数学娱乐论坛(第3版) - Powered by Discuz!.png
“al\pha”去除\变为“alpha”结果可以搜到主题 460 个 Screenshot 2022-12-25 at 07-07-14 搜索 - 悠闲数学娱乐论坛(第3版) - Powered by Discuz!.png

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-1-29 21:27

Bug report

kuing 发表于 2022-6-10 09:42
call 这个表情被我删了  新增了一些表情 (如果表情列表里还没出现,可以清理一下缓 ...


为什么全文搜索🎣(鱼竿)有65个帖子?
问题是这些帖子大多不含鱼竿符号.
Screenshot 2023-01-29 at 13-25-56 搜索 - 悠闲数学娱乐论坛(第3版) - Powered by Discuz!.png

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2023-1-29 22:35

搜索其他 emoji 也能找到这些帖子,搜出来的帖子似乎都有 emoji,虽然不是同一个,但或许可能是有一个字节相同?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-1-29 22:43


kuing 发表于 2022-12-23 11:25
hbghlyj 发表于 2022-12-23 03:15
X3.5核心亮点:
⋯⋯
4、支持UTF8MB4(支持emoji表情、更多字符的支持)
⋯⋯
4 已在本论坛实现

X3.5 的搜索对emoji支持较完善

点评

我不想再折腾了  发表于 2023-1-29 22:53

730

主题

1万

回帖

9万

积分

积分
93623
QQ

显示全部楼层

 楼主| kuing 发表于 2023-1-29 23:21
kuing 发表于 2023-1-29 22:35
搜索其他 emoji 也能找到这些帖子,搜出来的帖子似乎都有 emoji,虽然不是同一个,但或许可能是有一个字节相同?


钓鱼 emoji 🎣 的 UTF-8 编码是:
\xf0\x9f\x8e\xa3
搜到的第一个“彭赛列?”那帖里我打了一个 emoji 🙄 的 UTF-8 编码是:
\xf0\x9f\x99\x84
前两个相同,于是就搜出来了,是酱紫吧?

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-1-29 23:25
kuing 发表于 2023-1-29 16:21
前两个相同,于是就搜出来了,是酱紫吧?

有个问题: 为什么前两个相同就能匹配? 中间没有空格, 也不是 or 连接啊

点评

不知道😁  发表于 2023-1-29 23:41

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-1-29 23:42
kuing 发表于 2023-1-29 16:21
钓鱼 emoji 🎣 的 UTF-8 编码是:
\xf0\x9f\x8e\xa3
搜到的第一个“彭赛列?”那帖里我打了一个 emoji 🙄 ...


相关:mb_strpos把Emoji当成一个整体来匹配, 例如
  1. <?php
  2. $text = "11🎣🎣\xf0";
  3. print "mb_stripos\n";
  4. print mb_stripos($text,"\xf0");
  5. print "\nstripos\n";
  6. print stripos($text,"\xf0");
复制代码

Output (onlinephp.io/)
  1. mb_stripos
  2. 4
  3. stripos
  4. 2
复制代码

mb_stripos把🎣作为整体, 不匹配\xf0
mb_stripos处理较简单, 把🎣作为几个字节, 匹配\xf0

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-2-7 08:33
Mroonga is a storage engine for MySQL. It provides fast fulltext search feature for all languages including Chinese, Japanese and Korean to all MySQL users.
mroonga.org/

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-2-7 08:38

MySQL可以使用BOOLEAN模式执行高级查询

mysql中文全文检索实战与性能对比

必须包含"腾讯"
  1. SELECT * FROM articles
  2. WHERE MATCH (title,body)
  3. AGAINST ('+腾讯' IN BOOLEAN MODE);
复制代码
必须包含"腾讯",但是不能包含"通讯工具"
  1. SELECT * FROM articles
  2. WHERE MATCH (title,body)
  3. AGAINST ('+腾讯 -通讯工具' IN BOOLEAN MODE);
复制代码
下面的例子演示了BOOLEAN模式下运算符的使用方式:

'apple banana'
无操作符,表示或,要么包含apple,要么包含banana

'+apple +juice'
必须同时包含两个词

'+apple macintosh'
必须包含apple,但是如果也包含macintosh的话,相关性会更高。

'+apple -macintosh'
必须包含apple,同时不能包含macintosh。

'+apple ~macintosh'
必须包含apple,但是如果也包含macintosh的话,相关性要比不包含macintosh的记录低。

'+apple +(>juice <pie)'
查询必须包含apple和juice或者apple和pie的记录,但是apple juice的相关性要比apple pie高。

'apple*'
查询包含以apple开头的单词的记录,如apple、apples、applet。

'"some words"'
使用双引号把要搜素的词括起来,效果类似于like '%some words%',
例如“some words of wisdom”会被匹配到,而“some noise words”就不会被匹配。

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-2-11 23:02
通常的搜索引擎会显示关键词所在的上下文, 凭此可在搜索结果中选择, 再点击进入, 很方便.
但Discuz搜索只显示开始几句, 不一定含关键词

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-3-5 19:13
Discuz!X3.6 开发计划预规划
5. 搜索功能需要继续优化,底线是上线新版 Sphinx ,最好能上线搜索扩展功能从而可以支持多种搜索引擎接入。
——老周部落

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2023-4-19 12:00

趁着时间停止,研究一下搜索机制

搜索帖子标题(title)的关键词为a+bBase64编码YSti
搜索范围为全部版块.
后台所进行的MySQL查询为 (为了解释方便,我进行了分行)
  1. SELECT searchid, dateline,
  2. ('10'<>'0' AND uid='2861' AND 1681876835-dateline<'10') AS flood,
  3. (searchstring='forum|title|YSti|0||\\\'5\\\',\\\'6\\\',\\\'14\\\',\\\'7\\\',\\\'11\\\',\\\'12\\\',\\\'13\\\',\\\'9\\\',\\\'10\\\',\\\'2\\\'|0|0|all|||0' AND expiration>'1681876835') AS indexvalid
  4. FROM common_searchindex
  5. WHERE srchmod='2' AND ('10'<>'0' AND uid='2861' AND 1681876835-dateline<10) OR (searchstring='forum|title|YSti|0||\\\'5\\\',\\\'6\\\',\\\'14\\\',\\\'7\\\',\\\'11\\\',\\\'12\\\',\\\'13\\\',\\\'9\\\',\\\'10\\\',\\\'2\\\'|0|0|all|||0' AND expiration>'1681876835')
  6. ORDER BY flood
复制代码
先看第一行 SELECT 语句用于从表 common_searchindex 中选择特定的列。被选中的列是 searchid、dateline、flood 和 indexvalid。
第二行('10'<>'0' AND uid='2861' AND 1681876835-dateline<'10') AS flood创建一个名为 flood 的新列,它返回一个布尔值 true 或 false。它检查 uid 为 2861 的当前用户(我)是否在最近 10 秒内进行了搜索。如果是,则 flood 设置为 true,否则设置为 false。
第三行创建另一个名为 indexvalid 的新列,它也返回一个布尔值 true 或 false。它检查searchstring是否有效且expiration未过期,则将 indexvalid 设置为 true,否则设置为 false。
第四行指定了从中选择数据的表,即 common_searchindex。
第五行指定了数据必须满足的条件才能被选中。条件有点复杂。
('10'<>'0' AND uid='2861' AND 1681876835-dateline<10):这个子条件检查uid为2861的当前用户是否在最近10秒内进行了搜索。
第六行“ORDER BY flood”将选中的数据按“flood”列升序排列。

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 16:01

Powered by Discuz!

× 快速回复 返回顶部 返回列表