Marklogic search development -2.3 Search Term Completion Using search:suggest

鉴于term completion对于searchapplication的重要性,因此独立出这个功能点。 它确实也不同于search。Search是用来配合用户querystring工作的,即转换query string为相应的cts:search,设置查询scope,处理查询结果sinppet等等。而termcompletion更是一种用户体验的功能,它并不是用户search的目标,它是辅助用户设置query string的功能。

Marklogic中支持此功能的就是search:suggest.

通常的使用场景时:用户浏览器中,设置Javascript来监听用户的querystring的输入,获取输入发起异步的marklogic search:suggest call。用户type单词,获得search:suggest的结果以便提供用户体验。

2.3.1        default-suggestion-source Option

search:suggest我们知道它也是基于用户的输入,去database中查询获取相关的信息给到用户,以便提升用户体验。因此其必然在marklogicserver端存在一个这样的数据源以便用于查询。

整个数据源显然不应该是整个数据库(index),应该给的更有意义一些。 如:当你输入“三星”的时候,这个数据源可以提供诸如:三星手机/三星电视/三星电子 等等的信息。显然这些信息不是来自数据库的(你的数据库中可能有“三星上将/他是个三星级酒店”等等)。那么这个样的数据源貌似一定是需要进行人工维护的。否则给出的结果就不makesense了。(通常有使用人工维护或者机器学习等)。

知道了term completion, search:suggestion的效果及工作方式.因此marklogicdatabase必然也需要提供这样一个数据源来支持整个feature。这就是我们的default-suggestion-source.

我们知道这个source是需要维护的,一旦我们没有维护这个东东。或者用户的输入没有在source里面进行相应的维护,我们这个feature又会如何呢?这里marklogic考虑了这样的情景,在此场景下,marklogic会将searchoption中定义的constraintoperator做为这个source给到用户的。这样的处理就是水到渠成的感觉,因为我们知道constraint是来做searchscope的;operator用来提升用户体验的。它们能提供给最终用户是多么的及时和有用。

既然我们知道suggest背后有这样一个source。那么在大数据的情况下,我们就要考虑searchperformance的问题。 最佳实践:大数据下,使用rangeindex/collection来替代word lexicon。顺理成章,wordlexicon的粒度要远远低于string range index和collection。所以这个source的scope就会变小,performance自然提升。

<default-suggestion-source>

<range type="xs:string">

<element ns="my-namespace"name="my-localname"/>

<attribute ns=""name="my-attribute"/>

</range>

</default-suggestion-source>

(source来自my-localname的my-attribute)

Range index是针对element或者attribute的,而wordlexicon,天啊,是针对所有内容的!

2.3.2        Choose Suggestions With the suggestion-sourceOption

我们知道search:suggest是工作在一个suggestion-source上的,那么如果这个source拥有hugerecord那么会怎样?第一suggest term会非常多,第二performance有影响。 因此我们需要一个方案可以进一步限定source中的特定记录集用作source。 这个就是suggestion-source option了。

<constraintname="name">

<rangecollation="http://marklogic.com/collation"

type="xs:string"facet="true">

<elementns="my-namespace" name="fullname"/>

</range>

</constraint>

<suggestion-sourceref="name">

<rangecollation="http://marklogic.com/collation"

type="xs:string"facet="true">

<element ns="my-namespace"name="short-list-name"/>

</range>

</suggestion-source>

可以看到,我们定义了name这个constraint,我们知道constraint是用来在一定的word/value/collection之中进行search的。那么我们可以认为它就是一个search的结果级别。而你看到ref=“name”很明确的,表示suggestion-source将会使用name这个constraint的结果集。而其中二次定义的name=”short-list-name”将会使用新的search条件来获取search 结果集。

一个问题:这样的结果集是在constraint执行前进行filter还是等constraint结果集执行后进行filter

2.3.3        Use Multiple Query Text Inputs to search:suggest

当用户输入多个search term的时候,是个什么情形?

Search:suggest会将第一个term会用来去再suggest-resource中做matchingsearch的操作,而之后的若干的term会解析成相应的cts:query,并使用and-query的方式将他们combine起来。


如上:你可以输入comp,但同时你checked了decade:1980s.假设这里decade:1980s是个针对constraint道德查询(cts:query),那么以上场景你的search:suggest如下:

Search:suggest((“comp”,”decade:1980s”),$option)

这代表是用comp*在suggest-resource中进行search,同时使用constraintsearch:”decade:1980s”.来限定结果集.

2.3.4        Make Suggestions Based on Cursor Position

如题,这个可以按照鼠标位置取相应的term进行suggest的查询。

当然,这个鼠标(光标)位置需要客户通过$cursor-posistion来进行传达。

2.3.5        search:suggest Examples

Assume a constraintnamed filesize for the following example:

query:suggest("fi",$options)

(:Returns the "filesize" constraint name first, followed

bywords from the default source of word suggestions:

("filesize:", "field","file", "fitness", "five",) :)

 

The followingexample shows how search:suggest works with bucketed range constraints:

(:Assume $options contains the following:

<constraintname="date">

<rangetype="xs:dateTime">

<bucketname="today">

<bucketname="yesterday">

<bucketname="thismonth">

<bucketname="thisyear">

...

:)

search:suggest("date:",$options)

(:bucket names from the "date" range constraint are

used tocreate suggestions

("date:thismonth","date:thisyear", "date:today", "date:yesterday"):)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
备份 Elasticsearch 索引可以通过 Elasticsearch 的 Snapshot API 来实现。Elasticsearch-head 是一个基于浏览器的 Elasticsearch 管理界面,它并不提供索引备份功能,但你可以使用 Elasticsearch-head 来检查索引的状态并执行备份操作。 以下是备份 Elasticsearch 索引的步骤: 1. 创建一个用于存储备份的 Elasticsearch 仓库。你可以使用本地文件系统或者远程文件系统(如 S3、Azure Blob 存储等)作为仓库。例如,使用本地文件系统作为仓库: ``` PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/path/to/my/backup/directory" } } ``` 2. 在仓库中创建一个快照。以下示例将备份名为 `my_index_backup` 的索引: ``` PUT /_snapshot/my_backup/my_index_backup?wait_for_completion=true { "indices": "my_index", "ignore_unavailable": true, "include_global_state": false } ``` 其中,`wait_for_completion` 参数表示是否等待备份完成,`indices` 参数表示要备份的索引名称,`ignore_unavailable` 参数表示是否忽略不可用的索引,`include_global_state` 参数表示是否备份全局状态信息。 备份完成后,你可以使用 Elasticsearch-head 来检查备份状态: 1. 打开 Elasticsearch-head 界面,选择要备份的索引,点击 `Snapshots` 标签页。 2. 在 `Snapshots` 标签页中,你可以看到备份的状态和详细信息。 注意,备份索引可能会花费一定的时间和存储空间。建议在低峰期进行备份操作,并定期清理旧的备份文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值