如何将显示的建议文本转换为匹配的单词

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
);

我不确定INSTRSUBSTR 是否在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 查询呢?抱歉,我忘记了那个细节。

以上是关于如何将显示的建议文本转换为匹配的单词的主要内容,如果未能解决你的问题,请参考以下文章

从文本输入中突出显示 div 中的所有匹配单词

python如何查找两个文本文件之间的所有单词匹配

在 HTML 标记的文本内容中查找单词/文本并用突出显示标记替换匹配项的可靠方法是啥?

如何使用 Python 在 QTextEdit 中动态突出显示单词?

Swift:使用时间戳渲染转录

添加颜色以匹配twitter typeahead中的文本突出显示