我有一个长期的问题,就是不太了解如何实现一个像样的Lucene排序或排名。假设我有一个城市及其人口的列表。如果有人搜索“new”或“london”,我希望前缀匹配列表按人口排序,我将前缀搜索和排序字段颠倒,其中有人口字段,即新墨西哥州、纽约州;或者伦敦,伦敦德里
然而,我也总是希望精确匹配的名字在顶部。因此,在“伦敦”的例子中,列表应该显示“伦敦,伦敦,伦敦德里”,第一个伦敦在英国,第二个伦敦在康涅狄格州,即使伦敦德里的人口比伦敦多
有人有单一的查询解决方案吗?我当前的解决方案是创建一个精确搜索
我正在使用Jackrabbit,并尝试查询具有UUID的现有节点。
我的代码如下所示。问题在于referenceNode的UUID的格式为“90be246a-a17c-445e-a5ad-81b064de0bee”,而且在Jackrabbit(Lucene)中使用的XPATH引擎似乎在处理连字符方面存在问题
如果我运行query2,一切都很好,并且会打印referenceNode。
如果在Eclipse中运行query1(使用UUID),则不会返回任何内容。
但是,如果我在Jackrabbit查
我使用Lucene搜索HTML文档。我的问题是增加了索引文件的大小,我有大约300-400MB大小的HTML文件,但索引运行高达.98Gb。我看到的原因是因为我们的规格。就像我们为四个不同的字段索引相同的内容一样,我想这就是问题所在(我们使用相同的内容,一个区分大小写,另一个不区分大小写,一个区分大小写,带特殊字符,另一个不区分大小写)
有没有办法减少索引的大小?保持相同的要求?是否有一种不同的方法来索引相同的字段并以不同的方式搜索以支持所有字段?我认为您的问题在于存储这些字段,而不仅仅是索引它
我要搜索一个场景。为此,我使用Lucene索引工具。那么,如何使用小于或大于条件进行查询呢。目前它只接受或,并且。从网站上看,luncene不支持小于或大于条件。
也许范围搜索就可以了。谢谢。你所说的是对的,我用它来获得两者之间的效果
有人能用一个简单的场景和源代码详细介绍一下lucene中的BlockJoinQuery吗?我找不到谷歌关于BlockJoinQuery的任何有效链接。任何有关这方面的详细链接都将对我有用
提前谢谢我刚刚写了一篇关于这个的博客:
http://blog.mikemccandless.com/2012/01/searching-relational-content-with.html
我希望我的用户的搜索结果包括一些关于给定搜索查询有多少匹配项的想法
但是,在对用户的搜索日志进行了一些研究和观察之后,我注意到日志查询速度与总结果数之间存在直接的相关性,并确定这是因为我正在访问totalHits属性,它显然必须迭代整个结果集才能返回值
我很乐意返回一个近似值,甚至可能只是一个数量级,表明有多少结果可用,但我看不出是否有任何好的方法可以在不明显影响性能的情况下计算这个值。我真的不想只是在用户面前转储一个看似无底洞的结果集,而不向他们提供任何关于他们的搜索匹配了多少结果的粗略概念
是否有方法发出联接查询(http://www.searchworkings.org/blog/-/blogs/query-time-joining-in-lucene)在lucene中不直接使用查询API?是否可以针对此要求以文本形式发出查询?例如:
title:derivatives join(comments:great)
ApacheSolr(4.0,尚未发布)有一个可以处理连接查询的应用程序。如果我理解您的问题,我想您需要一个类似“title:developers AND comme
默认情况下,lucene高亮显示使用粗体标记的搜索字符串。我可以提供我自己的突出显示方案,使用其他颜色进行突出显示吗?如果您只使用普通的荧光灯,您可以通过SimpleHTMLFormatter传递它,它由您想要的任何前置和后置标记构成:
new Highlighter(fragmentScorer, new SimpleHTMLFormatter("<span>", "</span>"));
newhighlighter(fragmentscoler,newsimple
我正在运行最新版本的Lucene.Net(3.0.3)。(我还标记了lucene,因为它基本上是相同的架构…)
我有以下Lucene.Net.Analysis.Analyzer课程:
public sealed class LowerCaseKeywordAnalyzer : Lucene.Net.Analysis.KeywordAnalyzer
{
public override TokenStream TokenStream(string fieldName,
标签: Lucene
information-retrieval
如何使用Lucene(4.6)计算给定短语的文档频率
我找到了一种计算一个术语DF的方法。
对于短语(1-5个单词)有没有像这样优雅的东西
UPD:我所说的短语是指文档中必须出现的一系列术语。而且它们必须在文本中一个接一个地出现。Java代码:
看来PhraseQuery就是解决方案
for (termString <- splitted) {
pq.add(new Term(IndexProperties.textField, termString))
}
pq.setSlop(0
标签:elasticsearch Lucene
fuzzy-search
我是elasticsearch的新手,一直在寻找模糊查询搜索。
我制作了一个新的索引产品,其对象/记录值如下
{
"_index": "products",
"_type": "product",
"_id": "10",
"_score": 1,
"_source": {
"value": [
"Ipad
我需要一个非常特定的Lucene实现,它使用反序列化的JSON字符串存储多个“属性”字段
例如:
Document:
ID: "99"
Text: "Lorepsum Ipsum"
Properties: "{
"lastModified": "1/2/2015",
"user": "johndoe",
"modifiedChars": 2,
"before": "text a",
"after": "text b",
}"
Properties:"{
如何获取在solr架构中指定为未存储的字段“to”值。
此字段有一个copyField“text”。
Facet导致内存溢出,
有没有不使用方面查询就可以查看值的方法?如果设置了,则无法检索字段的值
通常有两个参数被索引和存储,它们可以有不同的组合
在这种情况下,值被存储和索引。也就是说,您可以搜索该字段,如果需要,还可以在搜索结果中检索该字段
在这种情况下,字段的值是索引的,即可搜索但不存储,因此无法检索
在这种情况下,该值不可搜索,但您可以在搜索结果中返回该值
在这种情况下,您既不能
我有一个包含一些短语的文件。使用lucene的jarowinkler,应该可以从该文件中获取输入的最相似短语
这是我的问题的一个例子
我们有一个包含以下内容的文件:
//phrases.txt
this is goodd
this is good
this is god
如果我的输入是这是好的,它应该首先从文件中获取“这是好的”,因为这里的相似性分数是最大的(1)。但出于某种原因,它返回:“这是好的”和“这是上帝”只
这是我的密码:
试试看{
拼写检查器拼写检查器=新拼写检查器(新RAMDir
我有一个弹性搜索集群,在那里我总是使用doc\u作为插入更新api。
我从不调用DeleteApi。
但如果我在弹性搜索中看到很多DeletedDocuments指标。
upsert是否间接调用delete然后插入?ElasticSearch不支持文档更新,即文档是不可变的,我们无法更改它们。显示为就地更改文档,但实际上Elasticsearch执行以下操作:
从旧文档检索JSON
更改文档
删除旧文档
为新文档编制索引
在内部,Lucene(ES是一个基于Lucene库的搜索引擎)只是在每段位
您好,我使用的是弹性搜索,但我想迁移到JavaLucene
我需要的是以相同的方式重新创建索引,并以相同的方式重新创建查询。我认为我做到了,但我从查询中得到的分数并不完全相同。结果非常相似,但结果本身的分数不同。也许我错过了什么。我找不到足够的信息,默认的弹性设置在Lucene中是等效的
我已检查我的Lucene版本是否与我使用的弹性搜索相同
我将向您展示我在elastic中的配置,以及我如何在Lucene上复制它
这是用于创建索引的弹性搜索连接器:
"analysis": {
"anal
我的文档有灵活的模式,所以我不知道在索引和查询期间字段是否是多值的
问题1:为所有方面字段设置FacetConfig#setMultiValued(“f”,true),并将此配置用于索引和查询,这意味着什么?它是否会显著影响性能和/或RAM/磁盘空间
问题2:如果在索引期间(我可以检查文档是否为多值文档),每个文档的多值设置不同,但在查询期间FacetConfig将始终硬编码为true或false?它会导致不正确的面计算吗
我正在使用Lucene开发“所有这些单词”功能。
我正在使用StandardAnalyzer,没有任何停止词。
当用户键入包含“the”、“and”等的单词时,lucene不会返回任何结果。
如果我从输入中删除停止词,lucene就会给出搜索结果
我将booleanquery与BooleanClause.Occurse.MUST子句一起使用
我是不是错过了什么
谢谢。您是否使用相同的分析仪设置重新索引?您必须对查询解析器和索引器进行更改
基本上,我有一个非常简单的数据库,我想用Lucene建立索引。
域名包括:
// Person domain
class Person {
Set<Pair> keys;
}
// Pair domain
class Pair {
KeyItem keyItem;
String value;
}
// KeyItem domain, name is unique field within the DB (!!)
class KeyItem{
String name
在为我的Lucene查询构建一些单元测试时,我注意到一些与标点符号相关的奇怪行为,特别是在括号周围
处理包含大量标点符号的搜索字段的最佳方法是什么?不仅仅是括号,其他标点符号(如冒号、连字符等)也会引起问题。是一种处理它们的方法。如果您还没有自定义查询解析器,Lucene应该按照。你有什么不同的想法吗?您希望标点符号具有特殊含义,还是仅从搜索中删除标点符号?
另一个常见的疑点是,它确定如何为字段编制索引,以及如何将查询分解为多个部分进行搜索。你能发布一些不良行为的具体例子吗?谢谢你的回复。我在文
我有一组Solr文档,其中包含(除其他字段外)多值字段,其中包含百分比数据,如果值为null,则为-1,例如
<doc>
...
<arr name="alpha">
<float>0.23</float>
<float>0.23</float>
<float>0.43</float>
</arr>
<a
我有一个索引,它有多个条目用于完全相同的项目,我指定了一个:引文
基于引文,我可以使用这个字段来确定它在索引中是唯一的
我想知道是否有办法调整查询,使其只返回基于该字段的唯一结果
或者更确切地说是删除所有副本,但我遇到的问题是,我没有存储文本,唯一另一种识别文档的独特方法是基于两个字段的组合。我希望有一种方法可以做到这一点,而不需要新的索引
谢谢我想你需要。您可以在不重新编制索引的情况下完成此操作,但我相信查询需要相对较长的时间 请提供更多细节。你想调整什么查询?我更担心uniqueKey似乎不
我想在Hadoop中为我的映射任务共享大内存静态数据(RAM lucene索引)?有没有办法让多个map/reduce任务共享同一个JVM?作业可以通过指定作业配置mapred.job.reuse.JVM.num.tasks来重用任务JVM。如果该值为1(默认值),则不会重用JVM(即每个JVM 1个任务)。如果为-1,则JVM可以运行(同一作业)的任务数没有限制。还可以使用api指定大于1的值。在$HADOOP\u HOME/conf/mapred site.xml中添加以下属性
<pr
我在Lucene中使用StandardAnalyzer对文本字符串进行索引,如下所示:
public void indexText(String suffix, boolean includeStopWords) {
StandardAnalyzer analyzer = null;
if (includeStopWords) {
analyzer = new StandardAnalyzer(Version.LUCENE_30);
有没有一种方法可以在Lucene中创建一个字段,该字段可以接受读取器或InputStream并存储其内容?我想存储数据,以便在突出显示时使用它,我想流式处理数据,因为文档的内容可能非常大
我没有看到一个字段的构造函数,它既允许我使用读取器,也允许我存储值。
谢谢如果您的文档不是太大,请先将它们读入内存,然后在添加新字段时将结果值指定为字符串。如果文档较大,请将其拆分为可管理的块,并对每个块执行上述操作。确保每个区块使用相同的字段名,以便Lucene搜索所有值
例如:
IndexWriter wr
我有一个索引,目前占据大约1gb的空间,有大约250万个文档。索引存储在固态驱动器上以提高速度。我一次添加2500个文档,并在添加每个批次后提交。该索引是一个“实时”索引,需要日夜保持最新,因此最小化写入速度非常重要。我使用的合并因子是10,我从不调用Optimize(),而是允许索引根据需要根据合并因子对自身进行优化
我需要在添加每个批之后提交文档,因为我记录了这一事实,以便在应用程序崩溃或重新启动时,它可以从停止的地方恢复。如果我没有提交,存储的状态将与索引中的不一致。我假设如果编写器在未提
我们是否必须在每次更新索引(增量)时为IndexWriter设置MergePolicy,或者如果MergePolicy仅在第一次设置为IndexWriter(当我们创建索引时),是否可以?如果没有为IndexWriter显式设置MergePolicy,对索引的后续更新是否了解该策略
谢谢您必须为IndexWriter的每个实例设置合并策略
这意味着,如果总是重复使用同一个IndexWriter(这是更新Lucene索引的首选方式),设置一次就足够了,但是如果创建另一个IndexWriter实例,
我开始研究第二版的“Lucene in Action”,它使用3.0 API,作者使用以下方法创建了一个基本的INdexWriter
private IndexWriter getIndexWriter() throws CorruptIndexException, LockObtainFailedException, IOException {
return new IndexWriter(directory, new WhitespaceAnalyzer(), IndexWrite
可以在动态计算最大距离dist的位置进行查询,这取决于与正在搜索的文档连接的字段
我的意思是:
ctx.makeCircle(la, lo, DistanceUtils.dist2Degrees(Min(100km, currentDocumnet.getField("max_distance")),DistanceUtils.EARTH_MEAN_RADIUS_KM))
而不是:
new SpatialArgs(SpatialOperation.Intersects,ctx.makeCi
我正在尝试让Elasticsearch为一些文档编制索引,以获得打字前的建议。据我所知,Elasticsearch中的edge NGram处理由Lucene提供。不幸的是,Lucene在这方面的文档对我来说很难理解。我提出的最好的方法是基于,但它似乎不起作用(带有这些设置的索引只返回完整单词的匹配项,就好像这些设置不存在一样):
我真的不知道分析器、标记器和过滤器是如何结合在一起的——我甚至想要一个过滤器吗?我需要一个标记器吗?为要使用的文档编制索引时,是否必须引用这些设置?如何找出Lucene
由于4.xLucene不读取3.0之前的任何索引,我试图想出方法将2.9索引转换为4.0
我会先解释这个问题。问题是遗留系统在Lucene中存储的信息要追溯到2.4。我知道这会导致问题,我已经采取措施在系统的许多部分(但不是所有部分)停止这样做。这是不好的原因之一,因为现在我们使用lucene的4.0,但仍然有2.9个索引需要能够在4.0中读取。对我来说,耗时的方法是写一些东西来创建一个新的4.0索引,然后读入2.9中的每个文档,从这些字段创建一个新文档。这需要一些时间,但可行
我提出的第二个解
我正在读《卢塞恩在行动》一书。书中提供了一个索引txt文件的示例。我需要试试这个例子。在eclipse中在哪里运行程序或如何运行程序?我正在使用Windows,我需要任何IDE来运行此程序。eclipse够了吗?我刚刚下载了“Lucene in Action,第二版”的源代码。它包含您需要的所有内容,从Ant build.xml文件到自述文件,其中告诉您如何运行示例
既然Eclipse内置了对Ant的支持,那么Eclipse就足以运行这些示例了。在您再次询问之后,您是否打算让这个问题悬而未决?
我发现包含“of”、“the”和“the”等的搜索不会返回结果,因为Lucene删除了停止词。因此,如果我搜索一个标题为“第一次世界大战的后果”的项目,我将得到零结果
但是,如果我剥去“of”和“the”,那么我就是在寻找“第一次世界大战的后果”。我将取回预期的文档
ContentSearchAPI是否从查询中删除停止词?这是可以配置Lucene删除的吗?或者我应该在构建查询之前删除这些停止词吗
谢谢
亚当我认为这个问题与这个问题是一样的
你能试着按照博客文章中的步骤来做吗
另一个选项是创建自定
在Sitecore lucene搜索中,我使用“术语查询”从Sitecore筛选数据。
在这里,我在Sitecore中有一个名为“Description”的字段,我想根据术语“Lorem”进行归档。但每次我都得到0的结果。如果我不使用rterm查询,我会得到所有结果,这意味着我的索引配置是正确的。请帮忙
TermQuery bothQuery=newtermquery(新术语(“描述”、“知识”);
BooleanQuery=新建BooleanQuery();
Add(包括query、Boole
我是sitecore的新手,目前正在接受sitecore开发人员培训。今天我遇到了一个奇怪的问题,在培训师也无法解决之后,我想我应该在这个论坛上发表文章
我在解决方案中添加了一些自定义搜索字段。这些字段也添加到Lucene默认搜索配置中。部署解决方案后,我尝试从“开发人员”菜单中重建索引选项,但我无法看到任何索引列表。我收到消息“索引列表无法呈现”
我也试过了
sitecore桌面->控制面板->索引->索引管理器,但
“Sitecore”对话框不会弹出
桌面->控制面板->数据库->重建索引不
我正在创建表单的简单文档索引:
[段落id]
有两个查询,一个由QueryParser创建:
QueryParser parser = new QueryParser(field, analyzer);
Query query1 = parser.parse("Lucene");
二是术语查询:
Query query2=new TermQuery(new Term("title", "Lucene"));
query1和query2之间有什么区别?这是lucene文档中术语的定义
A Term represents a word fr
我正在尝试使用sitecore对我的应用程序进行网站搜索。
挑战在于——虽然我可以使用Lucene做到这一点——我能够抓取项目并返回项目,但不能返回实际页面。页面项目可能与实际内容项目非常不同。
虽然这看起来像是一个非常常见的用例,但我无法找到解决方案来实现这一点。
我确实找到了像Coveo这样的工具,可以与Sitecore集成并抓取页面,但它们不提供完整的API。
想知道人们如何看待这一点的一般方法 我不确定您希望从Coveo使用哪一部分API,但如果您需要基于页面的搜索,我通常会推荐Cove
标签:elasticsearch Lucene
inverted-index
Elastic/Lucene如何处理未分析的字段?它不必为该字段值创建反向索引或位置(我可以想象)。它只需要记录值
我怀疑它仍然是一个只有一个术语的倒排索引。术语的位置总是固定在字段的开头和结尾。这看起来准确吗?在ES 2.x中,当声明字符串时,您需要考虑如何对其进行索引。您可以使用
index:analysisted,在这种情况下,对字符串内容进行分析并编制索引(->分析的标记存储在反向索引中)
索引:未分析,在这种情况下,未分析字符串内容,但仍按“原样”索引(>准确的字符串存储在反向索引中,
我正在寻找一种方法来进行精确的数组匹配,其中项目必须按顺序排列
示例文件:
{"id": 1, "categories" : ["A", "C","E"]}
{"id": 2, "categories" : ["A", "C"]}
{"id": 3, "categories" : ["C", "A"]}
当我用“A”和“C”搜索时,它将只返回第一个和第三个文档
{"id": 1, "categories" : ["A", "C","E"]}
{"id": 2, "categories" : [
我希望能够在所有文档中控制_doc参数的顺序。有办法做到这一点吗?我必须重新插入数据库中的所有文档吗?不,没有办法
粗略地说,是的,它将倾向于按插入顺序排序,但这不是一个保证,您永远不应该依赖于保持不变的排序。就像_score,_doc实际上不是一个字段。它是lucene的内部文档id。它可以在不通知的情况下更改,并且无法显式设置它的值。你只应该在不关心订单的情况下对其进行排序
如果希望有一个值以可预测的方式对文档进行排序,则需要使用该值为字段编制索引
标签: Lucene
hibernate-searchinfinispanjgroups
我尝试在两台机器上运行infinispan,并在一台机器上保存索引数据。当我尝试在两台机器上同时运行,并将索引和持久化(缓存存储)保存到数据库中时,我遇到以下异常:
Caused by: java.io.FileNotFoundException: Error loading metadata for index file: segments_2j|M|Course
at org.infinispan.lucene.impl.DirectoryImplementor.openInput(Dir
使用Elasticsearch/Kibana并尝试搜索嵌套对象中的字段。然而,它似乎不起作用。以下是我在模板中使用的映射:
{
“订单”:0,
“模板”:“ss7_信令*”,
“设置”:{
“索引”:{
“mapping.total_fields.limit”:3000,
“碎片的数量”:“5”,
“刷新间隔”:“30秒”
},
“映射”:{
“\u默认值”:{
“动态模板”:[
{
“字符串字段”:{
“映射”:{
“现场数据”:{
“格式”:“已禁用”
},
“索引”:“否”,
“类型”:
这是我使用Lucene执行短语查询的代码。虽然很清楚如何为索引中的每个文档获取分数匹配,但我不理解如何提取单个文档的匹配总数。
以下是我执行查询的代码:
PhraseQuery.Builder builder = new PhraseQuery.Builder();
builder.add(new Term("contents", "word1"), 0);
builder.add(new Term("contents", "word2"), 1
标签:elasticsearch Lucene
hibernate-search
我们正在使用hibernate search orm 5.9.2,希望获得准确的搜索结果,如:
如果用户从
John -> all data with John should display
John Murphy -> all data with John murphy should display
John murphy Columbia -> Only data with John murphy Columbia should display
John murphy C
应用程序版本
弹性搜索:v.7.1
Laravel:v5.8
操作系统版本:Ubuntu 18(服务器)/Windows 10(开发个人电脑)
Elasticsearch API的“query\u string”查询返回一条类似“Lexical error”的错误消息——告知查询中有错误
复制步骤:
a。我们使用的“查询字符串”查询包含4629个字符(包括字母和符号,如括号和双引号)
B当我们使用PHP和Python应用程序进行查询时,会弹出标题中提到的错误
主要问题
我是做错了什么,还是应
我在一个Hibernate搜索应用程序中工作,目前我已经为一个postgres数据库编制了索引,在我创建了一些Lucene查询之后,一切都正常
我担心是否可以对多个实例使用Hibernate搜索(其中所有实例都具有相同的db结构)。这是因为我希望将信息拆分为多个实例(不仅仅是本地实例),并避免将所有数据存储在一个实例中
最好的方法是什么
我可以使用Hibernate搜索来执行此操作吗
我认为有一种方法可以在同一个Lucene索引中包含多个实例,因此无论数据来自何处,我都可以查询该索引以获取和检索
我必须搜索文档,其中文本字段“Body”包括“使用SAN的订户的余额”和“调用reip适配器后未找到排除项”。我在Kibana中创建KQL请求:
正文:“具有SAN的订阅服务器的平衡”,而非正文:“在调用reip适配器后未找到”
但结果包括两个条件,如:“订户与SAN的平衡”和“调用reip适配器后未找到”。为什么在我的结果中出现“使用SAN的订户的平衡”和“调用reip适配器后未找到”
检查KQL请求:
“和非”条件不起作用,响应:
-----omitted--------
上一页 1 2 ...
51 52 53 54 55 56 57 ...
下一页 最后一页 共 78 页