首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有上下文的Solr/Lucene查询柠檬化

具有上下文的Solr/Lucene查询柠檬化
EN

Stack Overflow用户
提问于 2016-10-04 10:13:04
回答 1查看 885关注 0票数 7

我已经成功地为Lucene设计了一款捷克狐猴。我正在用Solr测试它,它在索引时运行得很好。但是,当用于查询时,它工作得不太好,因为查询解析器没有向狐猴提供任何上下文(前面或后面的单词)。

例如,短语pila vodu在索引时的分析与查询时的分析不同。它使用了歧义词pila,它可以表示pila (例如链锯)或pít (动词"to drink“的过去式)。

pila vodu ->

  • 索引时间:pít voda
  • 查询时间:pila voda

。。因此,在文档片段中找不到单词pila,也不会突出显示该单词。

这种行为记录在solr wiki (引用如下),我可以通过调试我的代码来确认它(只有孤立的字符串"pila“和"vodu”被传递给狐猴)。

..。Lucene QueryParser在将任何文本提供给分析器之前在空白上进行标记,因此如果一个人搜索单词sea biscit,分析器将分别被赋予单词"sea“和"biscit”,.

所以我的问题是:

是否有可能以某种方式更改、配置或修改查询解析器,从而使狐猴能够看到整个查询字符串,或者至少看到单个单词的某些上下文?我想有一个解决方案,也为不同的solr查询解析器,如dismax或edismax。

我知道,像"pila vodu" (引号)这样的短语查询没有这样的问题,但是如果没有确切的短语(例如,带有"pila víno“甚至"pila dobrou vodu”的文档),我就会丢失文档。

编辑--试着解释/回答以下问题(谢谢@femtoRgon):

如果这两个术语不是一个短语,所以不一定会结合在一起,那么为什么它们要在上下文中相互分析呢?

当然,最好是只分析合并的条款。例如,在索引时,引理器检测输入文本中的句子,并且只对单个句子中的单词进行分析。但是,如何在查询时实现类似的事情呢?实现我自己的查询解析器是唯一的选择吗?我非常喜欢pf2pf3解析器的选项,如果是我自己的解析器,我需要再次实现它们吗?

背后的想法实际上更深一点,因为狐猴正在进行词义消歧,甚至对于具有相同词汇基础的单词也是如此。例如,bow一词在英语中大约有7个不同的词义(参见维基百科),而狐猴就是区分这类意义的。因此,我想利用这一潜力,使搜索更加精确--只返回包含查询所需具体意义上的单词bow的文档。因此,我的问题可以扩展到:如何为查询项获得正确的<lemma;sense>-pair?如果这个词是在其共同的上下文中呈现的,那么它通常能够指定正确的意义,但是当没有上下文的时候,它就没有机会了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-04 14:22:35

最后,我实现了自己的查询解析器。

感谢作为指南和参考实现的edismax源代码,这并不困难。我可以很容易地将解析器的结果与edismax的结果进行比较。

解决方案:

首先,我一起分析整个查询字符串。这给了我“记号”的列表。

与停止词有一点冲突,因为分析器忽略了停止词的标记,因此获得停止词的标记并不容易,但是您可以从PositionIncrementAttribute中检测到它们。

在“令牌”中,我以与edismax相同的方式构造查询(例如,创建在DisjunctionMaxQuery实例中组合的所有2-令牌和/或3-令牌短语查询)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39849662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档