gpt4 book ai didi

lucene - 使用Lucene实现XQuery全文搜索的提示

转载 作者:行者123 更新时间:2023-12-04 19:40:26 26 4
gpt4 key购买 nike

我在先前的项目中使用过Lucene,所以我对API有点熟悉。但是,我从来不需要做任何“幻想”(其中“幻想”是指使用过滤器,使用不同的分析器,增强功能,有效负载等)。

我将着手实现XQuery的全文本搜索功能:

http://www.w3.org/TR/xpath-full-text-10/

它的查询功能是我所见过的最复杂的功能。根据我对Lucene的经验,我知道它可以用于实现某些功能。但是,我想遍历所有这些。对于每个功能,我只需要一个简单的答案,例如“最好使用查询过滤器来实现功能X”,因此我将为每个功能正确地开始。

注意:我将实现自己的查询解析器,并使用Lucene类的各种实例“手动”构造查询。

3.3基数选择

这使您可以说出类似以下内容:

title ftcontains "usability" occurs at least 2 times


这意味着标题字段必须至少包含两次“可用性”。如何才能做到这一点?

3.4.4阻止选项

这使您可以将已被索引的词与查询中词干的词进行匹配,例如:

title ftcontains "improve" with stemming


即使标题包含“改进”,也可以匹配。请注意,由于在查询时而非索引时指定了是否使用词干的决定,因此无法使用PorterStemFilter。

在这种情况下,是否需要将每个单词两次添加到索引中?一次用于原始单词,一次用于词干单词(假设词干单词与原始单词不同)?或者,还有更好的方法?

3.4.5案例选项

这使您可以在查询时指定“不区分大小写”,“区分大小写”,“小写”,“大写”之一。

我认为可以使用查询过滤器来实现最后两个,因为对于“小写”,仅当文档文本全部为小写时(与“大写”相同)才匹配。

但是您如何处理不区分大小写/区分大小写的规范?一种想法是将每个单词加两次:一次在其原始情况下,一次在规范化情况下(任意选择为小写)。还有更好的主意吗?

3.4.6变音符号选项

这与Cast Option相似,除了它的“不区分变音符号”或“不区分变音符号”。如何实现呢?

3.4.7停用词选项

这使您可以指定“ qt查询时间”“带停用词”,例如:

abstract ftcontains "propagating of errors"
with stop words ("a", "the", "of")


将使文档与包含“传播少量错误”的摘要相匹配。我知道这似乎很奇怪。就像停用词变成通配符一样,即:

"propagating of errors" -> "propagating * errors"


*将与文档中的任何单词匹配。如何在Lucene中实现呢?

3.5.3轻度不选择

XQuery具有“ not”的两种味道:(常规)not和“温和的”。这使您可以进行如下查询:

body ftcontains "Mexico" not in "New Mexico"


仅当不包含“新墨西哥”一词时才匹配包含“墨西哥”的文档。我猜想您可以为此使用查询过滤器,是吗?

3.6.1有序选择

这使您可以要求查询中单词的顺序与文档中单词的顺序相匹配,例如:

title ftcontains ("web site" ftand "usability") ordered


仅当文档中同时出现了短语“网站”和“可用性”,并且“可用性”以单词顺序出现在“网站”之后时,该关键字才匹配。 Lucene SpanQuery类必须有权访问单词位置,是吗?您如何访问这些?

3.6.4范围选择

这使您可以要求单词出现在同一“范围”中,例如:

abstract ftcontains "usability" ftand "web site" same sentence


您也可以将{same | different} {sentence | paragraph}进行任意组合。我对此的猜测还应该是跟踪有效负载中的句子/段落数据。是?

3.7忽略选项

给定部分XQuery:

let $x := <book>
<title>Web Usability and Practice</title>
<author>Montana <annotation> this author is
an expert in Web Usability</annotation> Marigold
</author>
<editor>Vera Tudor-Medina on Web <annotation> best
editor on Web Usability</annotation> Usability
</editor>
</book>


如果我要查询:

book ftcontains "Web Usability" without content $x//annotation


那么它根本不会考虑元素内的任何文本。 “ Web可用性”将被发现两次:一次在title元素中,一次在Editor元素中。请注意,后一元素在“ Web可用性”短语的中间。我对此的猜测还应该是使用有效载荷数据来存储每个单词都位于其中的元素,然后使用基于该元素的过滤器。是?



我意识到这很多,但是任何指针都值得赞赏。谢谢!

最佳答案

您可能有兴趣查看我刚刚在GitHub上发布的Lux项目:https://github.com/msokolov/lux。它集成了Saxon XQuery处理器和Lucene / Solr,可通过XQuery提供全文搜索功能。我采用的方法是提供一个直接公开Lucene查询功能的搜索功能,而不是像这样实现XQuery全文。但是,我相信可以使用类似的方法来实现xqft。 Lux包括两种索引:路径索引(包括元素名称和属性名称)和文本索引,其中节点名称作为令牌文本的一部分(不在有效负载中)。这使得使用现有的Lucene查询变得容易。

但是要更好地回答您的问题:我很确定3.3可以使用带有大斜率的SpanNearQuery来实现。

对于3.4、3.5、3.6和3.7:为了允许查询时分析选择(如词干分析,区分大小写等),有两种可能性:创建多个字段,为每个分析选项选择一个,或添加多个每个分析选项组合都位于同一位置的标记。但是,使用第二个选项时,您还需要向每个令牌添加一些信息,以指示用于创建令牌的分析设置,Lucene在此没有提供任何帮助-您必须像添加有效载荷或前缀一样玩弄技巧术语文本以某种方式。

嗯-刚注意到这个问题是2年前问的,从未回答过。好吧-这显然是一个大项目!

关于lucene - 使用Lucene实现XQuery全文搜索的提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com