【问题标题】:Is it possible to resolve a punctuation-sensitive search from the index?是否可以从索引中解决标点敏感搜索?
【发布时间】:2013-07-22 09:55:05
【问题描述】:

我有一个搜索应用程序,由于文档的性质,用户经常在搜索词中包含(相关)标点符号。这通常会导致结果估计与实际过滤后的结果计数大不相同。

鉴于我知道我将要运行的搜索的性质,我想做的是配置通用索引以反映这一点。在这种情况下,我从不想要运行不区分标点符号的搜索,因此似乎将 ML 配置为包含标点符号作为“单词字符”以构建其术语列表将使估计匹配实际匹配更接近。

我还没有找到任何配置 ML 来构建通用索引的方法(我假设会有“快速标点敏感搜索”选项);我什至尝试使用标点符号敏感排序规则创建一个单词词典,希望 ML 将其用作如何配置其术语列表生成的提示,但没有骰子。

在理想情况下,我可以配置两个术语列表;一个对标点敏感,一个不敏感,但就本问题而言,只需在两者之间进行选择就足够了。

这样的事情可能吗?

【问题讨论】:

  • 您能否添加更多关于什么样的搜索需要标点敏感的详细信息,为什么?理想情况下,您可以共享一些示例 XML 和查询,以说明为什么此特定内容对标点符号敏感。

标签: marklogic


【解决方案1】:

通用索引会索引标点符号,但仅适用于节点values,不适用于words。单词查询的术语列表不包括标点符号,因为分词器将单词定义为不包含空格或标点符号的字符串。 http://docs.marklogic.com/guide/search-dev/languages 的文档讨论了标记化。在http://docs.marklogic.com/guide/search-dev/custom-dictionaries,他们还描述了如何使用自定义标记化和词干词典来修改该行为。但是对于大多数语言,该功能仍然不允许单词包含标点符号。

那么可以做什么呢?这将有助于更多地了解应用程序域,准确理解为什么搜索对标点符号如此敏感。由于缺乏这些细节,我认为答案是以某种方式将单词术语转化为价值术语。这可能涉及内容丰富、将词项转换为值项以及使用标点敏感范围索引进行查询扩展的某种组合。

为了丰富内容,您能否标记对标点敏感的单词和短语?如果关键术语类似于代码组,这可能会特别有效:例如 foo$bar 在其他文本中。通过将其标记为<psv>foo$bar</psv>,您可能能够在查询中检测到foo$bar,然后使用标点符号敏感的cts:element-value-query 而不是单词查询。

鉴于额外的标记,您还可以使用标点敏感排序规则在psv 上创建范围索引。然后范围索引约束会将psv:"foo$bar" 映射到该索引上的范围查询词。

范围索引的另一个用途是查询时扩展:将每个标点敏感词项转换为所有可能值项的OR。如果范围索引节点包含相对值,这将最有效。这种方法需要在应用程序代码中进行一些额外的工作,这必须确保正确的查询词使用正确的范围索引。这可以作为search:parsexqysp 之类的自定义解析器的后处理步骤来完成。核心思想是识别需要扩展的用户输入术语,然后使用来自cts:element-value-match 查找的值将cts:word-query 术语替换为cts:element-range-query 术语。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 2010-10-30
    • 2016-01-30
    相关资源
    最近更新 更多