问题标签 [query-parser]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
253 浏览

lucene - Lucene MultiFieldQueryParser 和 Highlighter

我正在通过不同的字段索引 lucene 索引中的文章,即title, description, link,publishDate

我使用MultiFieldQueryParser查询索引,例如

然后我将文章显示为搜索结果。到目前为止一切都很好。现在我想突出显示标题中的搜索文本,描述

我该怎么办?正常的荧光笔在生成片段时会给我NullPointerException 。PostingHighlighter了我一个Map根据字段组合在一起的结果..但我不希望这样。I 是要返回的整个文档,同时突出显示标题和描述中的搜索文本。

任何帮助或建议或代码片段表示赞赏..

0 投票
1 回答
1503 浏览

lucene - 具有多个字段的 Lucene Queryparser

我使用 Lucene 5.3 并尝试使用 queryparser-syntax 搜索多个字段。我在 Lucene 教程中找到了一个简短的示例,并将其修改为 5.3 版并搜索这些字段。

查询解析器正在为“title:part”工作,然后我得到所有包含“part”的文档,但如果我使用“title:(part) AND course_code:(3437RJ1)”或“title:(part) OR course_code:(3436NRX ) 结果为 0。搜索中的错误在哪里?

0 投票
1 回答
636 浏览

lucene - Lucene NOT_ANALYZED 不能使用大写字符

我已经使用 StandardAnalyzer 建立了一个索引,在这个索引中有几个字段。例如,假设它具有 Id 和 Type。两者都是 NON_ANALYZED,这意味着您只能按原样搜索它们。

我的索引中有一些条目:

当我搜索+Id:1或任何其他数字时,我会得到适当的结果(再次使用 StandardAnalyzer)。

但是,当我搜索+Type:Location或 时+Type:Group,我没有得到任何结果。奇怪的是,当我启用前导通配符时,+Type:*ocation确实会返回结果!+Type:*Location或其他组合不。

这让我相信索引器/查询不喜欢大写字符!在将类型小写到索引它们之前locationgroup我可以搜索它们。

如果我将 Type-field 设置为 ANALYZED,它几乎可以用于任何搜索(大写/小写等),但我想按原样查询 Type-field。

我完全困惑为什么它会这样做。谁能向我解释为什么我的索引器不允许我搜索具有大写价值的 NON_ANALYZED 字段?

0 投票
1 回答
775 浏览

java - 如何在Lucene中搜索特定范围内的词

我想搜索 中的术语[0, 10],术语来自存储为整数的“CityId”字段。我写的内容如下:

0 投票
1 回答
440 浏览

solr - Solr 最小匹配(mm)被强制条款忽略?

索尔属性:

  • solr-5.2.1
  • 默认运算符是AND

我正在使用下一个查询:

根据最小匹配文档,我希望匹配 2 个子句是搜索结果( as (int) (3 * 0.8) = 2)。

由于需要PROFESSION,我希望在结果中我将在此属性上匹配并且至少彼此匹配 - NAMESECOND_NAME

事实上,我正在获取与PROFESSION:physicist以及其他字段的任何其他值匹配的所有文档。如果我从请求中删除+符号,则 solr 返回至少有 2 个匹配项的结果(因此在这种情况下,最小匹配项可以正常工作)

看起来添加强制选项来请求废除最小匹配条件。smb 可以解释这是否是预期的行为?

谢谢

0 投票
1 回答
86 浏览

java - 带有 CustomAnalyzer 的 QueryParser 混淆了 PatternReplaceCharFilter 的使用顺序

org.apache.lucene.queryparser.classic.QueryParser在 lucene 6.0.0 中使用 a 来解析查询CustomAnalyzer,如下所示:

当我调用时,我得到以下输出testFilmAnalyzer

分析器似乎PatternReplaceCharFilter以正确的预期顺序使用 (即在标记化之前),而在QueryParser之后使用。有人对此有解释吗?那不是bug吗?

0 投票
1 回答
150 浏览

solr - Lucene 查询解析器 5.1.0 的奇怪行为

我正在使用 Lucene 查询解析器 5.1.0

这些过滤器查询不起作用:

它抛出

org.apache.solr.search.SyntaxError: Cannot parse 'guid:(*': Encountered \"<EOF>\" at line 1, column 7.\nWas expecting one of:\n <AND> ...\n <OR> ...\n <NOT> ...\n \"+\" ...\n \"-\" ...\n <BAREOPER> ...\n \"(\" ...\n \")\" ...\n \"*\" ...\n \"^\" ...\n <QUOTED> ...\n <TERM> ...\n <FUZZY_SLOP> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <LPARAMS> ...\n <NUMBER> ...\n

这些过滤器查询确实有效:

为什么前三个不起作用?它是查询解析器中的错误吗?

编辑:我发现空格也有奇怪的行为:

这确实有效:

这不起作用:

0 投票
2 回答
4441 浏览

java - 解析查询时出现Lucene错误:无法解析'':遇到“" 在第 1 行第 0 列

我想使用 Lucene 查询解析器解析一些文本,以对文本进行基本的文本预处理。我使用了以下代码行:

但是,我收到一个错误:

0 投票
1 回答
810 浏览

solr - Solr/Lucene 查询词形还原与上下文

我已经成功地为 Lucene 实施了捷克语词形还原器。我正在用 Solr 对其进行测试,它在索引时很好用。但它在用于查询时效果不佳,因为查询解析器不向词形还原器提供任何上下文(之前或之后的单词)。

例如,pila vodu在索引时对短语的分析与在查询时不同。它使用了模棱两可的词pila,可以表示pila (锯,例如电锯)或pít(动词“喝”的过去时)。

pila vodu->

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

..所以这个词pila没有找到,也没有在文档片段中突出显示。

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

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

所以我的问题是:

是否有可能以某种方式更改、配置或调整查询解析器,以便词形还原器可以看到整个查询字符串,或者至少是单个单词的某些上下文?我也想为不同的 solr 查询解析器(如dismaxedismax )提供解决方案。

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


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

如果这两个术语不是一个短语,因此不一定会一起出现,那么为什么要在上下文中对它们进行分析呢?

当然,最好只分析组合在一起的术语。例如,在索引时,词形还原器会检测输入文本中的句子,并且只分析单个句子中的单词。但是如何在查询时实现类似的事情呢?实现我自己的查询解析器是唯一的选择吗?我非常喜欢解析器的pf2andpf3选项,edismax如果是我自己的解析器,我是否必须再次实现它们?

背后的想法实际上更深一些,因为词法分析器正在对具有相同词汇基础的单词进行词义消歧。例如,这个词bow在英语中有大约 7 种不同的意义(参见wikipedia),词形还原器正在区分这些意义。所以我想利用这种潜力使搜索更加精确——只返回包含bow查询所需具体意义上的单词的文档。所以我的问题可以扩展到:如何<lemma;sense>为查询词获得正确的 -pair?如果单词出现在其共同的上下文中,则词形还原器通常能够分配正确的含义,但是当没有上下文时,它就没有机会了。

0 投票
1 回答
264 浏览

java - 查询选择所有lucene java

我正在尝试使用 Lucene 进行查询,我想选择标题以“@”字符开头的文档。我查看了文档,但结果是零元素。这是代码和结果。谢谢你的帮助。

这是代码:

这是输出