如何将显示的建议文本转换为匹配的单词
Posted
技术标签:
【中文标题】如何将显示的建议文本转换为匹配的单词【英文标题】:How to shift the displayed suggestions text to the matched word 【发布时间】:2013-10-10 21:02:00 【问题描述】:我不知道我的问题写得好不好,很抱歉,但这就是我需要的。
我有一个带有搜索活动的 android 应用和我自己的建议字典。
当我显示建议时,我在第一行使用项目名称,在第二行使用项目描述。
问题在于第二行中只有几个单词的空间,并且它从头开始显示描述。我想移动第二行文本以显示匹配的单词以及接下来会发生什么。
我希望它像 Google 一样工作。当它向您显示结果时,它会显示页面标题和第二个文本字段,其中包含您的单词所在的相关文本。
例如,如果我有这样的数据库:
item_name | item_description
Item1 | This is my description for ***.
Item2 | This is my second description for ***.
并且用户输入"my"
我想这样显示我的建议:
Item1
...my description for stacko
Item2
...my second description for
我将 SQLite DB 与 Content Provider 和 SearchWidget 一起使用。
怎么做?
【问题讨论】:
你读过section 4 of the documentation吗? 现在我做到了!谢谢!想要回答吗? 【参考方案1】:使用 FTS 时,可以使用snippet function:
sn-p 函数用于创建文档文本的格式化片段,以显示为全文查询结果报告的一部分。
> SELECT snippet(items, '', '', '...', -1, 3)
FROM items
WHERE items MATCH 'my';
...is my description...
...is my second...
【讨论】:
【参考方案2】:此数据库查询将返回所需的结果:
SELECT item_name, '... '||SUBSTR(item_description, p) FROM (
SELECT *, INSTR(item_description, 'my') AS p FROM items_table WHERE p>0
);
我不确定INSTR
和SUBSTR
是否在Android SQLite 引擎中实现。
编辑:
FTS4 不会返回匹配位置,至少我不这么认为。
不过,您可以使用它来加快先前的查询:
SELECT item_name, '... '||SUBSTR(item_description, p) FROM (
SELECT *, INSTR(item_description, 'my') AS p FROM (
SELECT * FROM items_table WHERE item_description MATCH 'my'
)
);
【讨论】:
谢谢@LD_dev。但是我使用的是 FTS4,那么我将如何使用 MATCH 查询呢?抱歉,我忘记了那个细节。以上是关于如何将显示的建议文本转换为匹配的单词的主要内容,如果未能解决你的问题,请参考以下文章
在 HTML 标记的文本内容中查找单词/文本并用突出显示标记替换匹配项的可靠方法是啥?