问题标签 [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.
lucene - Lucene MultiFieldQueryParser 和 Highlighter
我正在通过不同的字段索引 lucene 索引中的文章,即title
, description
, link
,publishDate
我使用MultiFieldQueryParser查询索引,例如
然后我将文章显示为搜索结果。到目前为止一切都很好。现在我想突出显示标题中的搜索文本,描述
我该怎么办?正常的荧光笔在生成片段时会给我NullPointerException 。PostingHighlighter给了我一个Map
根据字段组合在一起的结果..但我不希望这样。I 是要返回的整个文档,同时突出显示标题和描述中的搜索文本。
任何帮助或建议或代码片段表示赞赏..
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。搜索中的错误在哪里?
lucene - Lucene NOT_ANALYZED 不能使用大写字符
我已经使用 StandardAnalyzer 建立了一个索引,在这个索引中有几个字段。例如,假设它具有 Id 和 Type。两者都是 NON_ANALYZED,这意味着您只能按原样搜索它们。
我的索引中有一些条目:
当我搜索+Id:1
或任何其他数字时,我会得到适当的结果(再次使用 StandardAnalyzer)。
但是,当我搜索+Type:Location
或 时+Type:Group
,我没有得到任何结果。奇怪的是,当我启用前导通配符时,+Type:*ocation
确实会返回结果!+Type:*Location
或其他组合不。
这让我相信索引器/查询不喜欢大写字符!在将类型小写到索引它们之前location
,group
我可以搜索它们。
如果我将 Type-field 设置为 ANALYZED,它几乎可以用于任何搜索(大写/小写等),但我想按原样查询 Type-field。
我完全困惑为什么它会这样做。谁能向我解释为什么我的索引器不允许我搜索具有大写价值的 NON_ANALYZED 字段?
java - 如何在Lucene中搜索特定范围内的词
我想搜索 中的术语[0, 10]
,术语来自存储为整数的“CityId”字段。我写的内容如下:
solr - Solr 最小匹配(mm)被强制条款忽略?
索尔属性:
- solr-5.2.1
- 默认运算符是AND
我正在使用下一个查询:
根据最小匹配文档,我希望匹配 2 个子句是搜索结果( as (int) (3 * 0.8) = 2
)。
由于需要PROFESSION,我希望在结果中我将在此属性上匹配并且至少彼此匹配 - NAME或SECOND_NAME。
事实上,我正在获取与PROFESSION:physicist以及其他字段的任何其他值匹配的所有文档。如果我从请求中删除+符号,则 solr 返回至少有 2 个匹配项的结果(因此在这种情况下,最小匹配项可以正常工作)
看起来添加强制选项来请求废除最小匹配条件。smb 可以解释这是否是预期的行为?
谢谢
java - 带有 CustomAnalyzer 的 QueryParser 混淆了 PatternReplaceCharFilter 的使用顺序
我org.apache.lucene.queryparser.classic.QueryParser
在 lucene 6.0.0 中使用 a 来解析查询CustomAnalyzer
,如下所示:
当我调用时,我得到以下输出testFilmAnalyzer
:
分析器似乎PatternReplaceCharFilter
以正确的预期顺序使用 (即在标记化之前),而在QueryParser
之后使用。有人对此有解释吗?那不是bug吗?
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
这些过滤器查询确实有效:
为什么前三个不起作用?它是查询解析器中的错误吗?
编辑:我发现空格也有奇怪的行为:
这确实有效:
这不起作用:
java - 解析查询时出现Lucene错误:无法解析'':遇到“" 在第 1 行第 0 列
我想使用 Lucene 查询解析器解析一些文本,以对文本进行基本的文本预处理。我使用了以下代码行:
但是,我收到一个错误:
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 查询解析器(如dismax或edismax )提供解决方案。
我知道像 (quotes) 这样的短语查询没有这样的问题"pila vodu"
,但是我会丢失没有确切短语的文档(例如带有"pila víno"甚至"pila dobrou vodu"的文档)。
编辑 - 试图解释/回答以下问题(谢谢@femtoRgon):
如果这两个术语不是一个短语,因此不一定会一起出现,那么为什么要在上下文中对它们进行分析呢?
当然,最好只分析组合在一起的术语。例如,在索引时,词形还原器会检测输入文本中的句子,并且只分析单个句子中的单词。但是如何在查询时实现类似的事情呢?实现我自己的查询解析器是唯一的选择吗?我非常喜欢解析器的pf2
andpf3
选项,edismax
如果是我自己的解析器,我是否必须再次实现它们?
背后的想法实际上更深一些,因为词法分析器正在对具有相同词汇基础的单词进行词义消歧。例如,这个词bow
在英语中有大约 7 种不同的意义(参见wikipedia),词形还原器正在区分这些意义。所以我想利用这种潜力使搜索更加精确——只返回包含bow
查询所需具体意义上的单词的文档。所以我的问题可以扩展到:如何<lemma;sense>
为查询词获得正确的 -pair?如果单词出现在其共同的上下文中,则词形还原器通常能够分配正确的含义,但是当没有上下文时,它就没有机会了。
java - 查询选择所有lucene java
我正在尝试使用 Lucene 进行查询,我想选择标题以“@”字符开头的文档。我查看了文档,但结果是零元素。这是代码和结果。谢谢你的帮助。
这是代码:
这是输出