我们有一个包含3000多万个产品的超大数据库,需要查询它们来创建搜索结果,并每秒显示数千次广告。我们一直在研究Sphinx、Solr、Lucene和Elastic作为执行这些持续大规模搜索的选项
这是我们需要做的。获取关键字并在数据库中运行它们,以查找与最接近的产品匹配的产品。我们将使用我们自己的算法来决定哪些产品与我们的目标广告最相关,但我们知道这些引擎已经有了自己的关联算法
所以,我们的问题是如何在引擎的基础上高效地使用我们自己的算法。是否可以将它们作为某种模块添加到发动机本身?还是我们必须
我通过PHP使用Solr搜索我网站的所有方面。我正在尝试实现一个功能,但找不到有关如何实现它的任何信息
我有一组文档(评论),每个文档都是关于特定产品的
我想找到在单个产品的多个评论中出现的唯一1-2个单词的关键字(没有停止词),并计算它们出现在多个评论中的次数
一旦我有了这些,我想显示前X个关键词,它们在评论中的数量,以及每个关键词的单个顶部评论突出显示了该关键词的使用
编辑:
一旦我有了一个在多个评论中出现的唯一(不间断词/常用词)关键词列表,我想根据它们在评论中出现的次数对它们进行排名。例
solr/lucene中一个名为“颜色”的文档字段包含如下一组单词:
字段1:蓝色/深红色/绿色
字段2:蓝色/黄色/橙色
[……]
我需要在上面运行分面搜索,以获得所有颜色和每种颜色的计数。
首先,我尝试了PatternTokenizerFactory,然后是stopword列表:
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="/" />
<f
hi具有索引简单文档,其中有两个字段:
1. profileId as long
2. profileAttribute as long.
我需要知道有多少profileId具有特定的属性集
例如,i索引:
doc1: profileId:1 , profileAttribute = 55
doc2: profileId:1 , profileAttribute = 57
doc3: profileId:2 , profileAttribute = 55
我想知道有多少配置文件同时具有属性
你好,我有这样一段代码
IndexSearcher iSearcher = new IndexSearcher(dir);
TopDocs docs = iSearcher.search(parsedQuery,filter, 9);
我总是得到20分。有人能帮你吗?1你总是准确地得到20分吗?由于您的搜索将结果限制为9个ScoreDocs,我对“20个ScoreDocs”感到好奇
2您是否验证了索引中包含的Lucene术语会导致超过20个ScoreDocs?在更改索引策略后,我发现在执行任何
Lucene在IndexWriter上有一个UpdateDocument方法,该方法将删除现有文档并添加一个新文档。与显式调用DeleteDocuments然后调用AddDocument相比,使用此方法是否有任何好处?原子性update是原子调用,delete+add是独立的、独立的调用
我认为这个标题有点模糊,所以我要准确地解释我的问题
我正在Neo4j中创建一些节点,然后像这样对它们进行索引:
Index<Node> myindex = graphDb.index().forNodes(
"myindex",
MapUtil.stringMap(IndexManager.PROVIDER, "lucene", "type",
"fulltext"));
我想存储一个布尔值,但不确定使用哪种字段类型
理论上是这样的:
文件添加(新??(“数字”,真)
文件添加(新??(“字母”,真)
文件添加(新??(“字母数字”,真)
我将使用以下布尔字段类型进行查询:
搜索仅为数字的位置
搜索仅按字母顺序排列的位置
搜索字母数字在哪里
对最佳方法有何评论?(当然,速度/效率很重要)我认为,StringField将完成这项工作,因为您不希望值-true或false被标记化。此外,使用构造函数中的第三个参数,您可以选择存储字段或作为唯一索引的一部分而不存储
Ja
第一点背景:
我有一个重要的elasticsearch集群,拥有超过20TB的主数据(复制是必须的)。我们使用固态硬盘,所以存储成本不那么便宜。将数据重新索引到elasticsearch 5.4.1后,我注意到我的数据比使用elastic 1.7.5时占用的存储空间多30%。我的猜测是,这是由于在使用关键字映射类型时,doc\u值默认处于启用状态所致
我想测量特定映射字段的doc\u值的存储量?我知道我可以用两种不同的映射为文档编制索引并测量差异,但是有没有更简单、更快捷的方法
我检查了\u c
是否有人成功地覆盖了查询中文档的评分,以便通过自己的功能确定术语与字段内容的“相关性”?如果是这样的话,是不是通过实现a并覆盖customScore(int,float,float)?我似乎找不到一种方法来构建一个自定义排序或自定义记分器,它可以将精确的术语匹配排名远远高于其他前缀术语匹配。任何建议都将不胜感激。我不直接了解lucene,但我可以告诉您,基于lucene的Solr应用程序具有以下功能:
如果对您有帮助,请告诉我。我接受这一点,因为这是唯一的答案,虽然这是一个关于Solr的答案,
当我的用户输入像“word”这样的术语时,我希望将其视为通配符查询“word*”,以便找到以“word”开头的所有术语。有没有办法告诉QueryParser自动创建通配符查询,或者我必须自己解析查询?对于简单的查询,这应该不是问题,但是对于更复杂的查询,这可能会变得棘手 除非我遗漏了一些东西,否则对每个查询进行通配符查询通常是不可取的,因为它非常昂贵,可能会导致很多问题。如果你正在尝试找到一个结果,包括一个词干的变体(例如,Win ->优胜者,获胜等等),你应该考虑一个n-克方法。 除非我漏掉了
我试图理解Lucene,并编写了一个虚拟示例。我要找的是“不”,后面跟着“狐狸”,彼此相隔5分钟。
我希望文档3作为唯一的命中返回。然而,我最终没有得到任何点击。任何关于我可能做错了什么的想法都将不胜感激
代码如下:
//索引
public void doSpanIndexing() throws IOException {
IndexWriter writer=new IndexWriter(directory, AnalyzerUtil.getPorterStemmerAnalyz
Lucene文档的字段a包含内容hello和a包含内容world。如果我搜索“hello world”~2它将被建立=(。我如何修复它?
FastVectorHighlighter将突出显示它,就像helloworld(没有任何空格)(无论如何它不应该突出显示)a似乎是一个多值字段。
您是否已将positionincrementgap更改为更高的值?默认值position IncrementGap为0。
这将防止出现这种情况
我最近注意到Lucene StandardAnalyzer的行为在3.1版之后有所改变。具体来说,3.0和以前的版本将电子邮件、IP地址、公司名称等识别为单独的词汇类型,而以后的版本则不识别
例如,对于输入文本:“example@mail.com127.0.0.1 H&M“,3.0分析仪将识别以下类型:
1:example@mail.com:0->16:
2:127.0.0.1:17->26:
3:h&m:27->30:
但是,版本3.1和更高版本为相同的输入文本提供以下输出:
1:示例:0->
我想在一个术语中找到一个字符序列(超过三个字符)。我尝试过*字符\序列*(我知道这是不推荐的),但如果字符序列本身等同于术语,它不会返回结果
例如,如果术语是“testsomething”、“somethingtest”和“sometestthing”,那么如果搜索文本“test”,我希望在搜索结果中包含所有这些术语
有什么办法吗
谢谢 默认情况下,lucene支持前缀查询,要支持后缀查询,您可能需要做一些工作。你可以查一下
欢迎来到春路。要获得帮助,请按CTRL+SPACE或键入“提示”,然后按ENTER键。
roo>第21行第39列的词法错误。遇到:“\u2013”(8211),在:”
如何恢复索引
现在,当我升级到Roo1.2.1时,错误消息消失了,但我得到了Roo>null,效果相同:没有生成和编织*.aj源
代码很好,我已经在另外两台生成了所有.aj的机器上进行了检查,没有错误消息
假设1:它与windos/linux字符解释有关。它在Linux上工作,在Windows下出错解开了谜团
在其中一个测试中,我
标签: Lucene
full-text-searchreplicationclucene
我正在开发一个应用程序,它需要在桌面应用程序中创建一个CLucene索引,但需要在iOS设备上进行复制(只读)搜索,并在索引更新时进行高效更新
除了在索引发生变化时简单地重新下载整个索引外,我在这里有什么选择?CLucene本身不支持复制,但Solr(它构建在Lucene之上)支持复制,因此这显然是可能的。有人知道Solr是如何做到这一点的吗?有人知道如何实现类似的功能吗
如果这是不可能的,是否有任何(非基于Java的)全文搜索实现比CLucene更好地满足我的需求
查询桌面应用程序不是一个选项
我找不到任何关于如何使用此API的完整示例。下面的代码没有给出任何结果。知道为什么吗
static String spatialPrefix = "_point";
static String latField = spatialPrefix + "lat";
static String lngField = spatialPrefix + "lon";
public static void main(String[] args) throws IOException {
Spatia
我有以下问题:有几个文本文档需要解析和创建索引,但没有停止词和词干。我可以手动完成,但我从一位同事那里听说Lucene可以自动完成。
我在网上搜索了很多我尝试过的例子,但是每个例子都使用了不同版本的lucene和不同的方法,没有一个例子是完整的。
在这个过程结束时,我需要计算集合中每个术语的tf/idf
更新:我现在已经创建了一个包含一个文档的索引。该文档没有停止词,并且有词干。如何使用lucenc计算此文档的tf/idf?(我将在计算出如何进行计算后添加更多文档)
对lucene的任何帮助都将
我在搜索容器中使用以下内容查找给定组中的项目:
SearchContext searchContext = SearchContextFactory.getInstance(request);
searchContext.setStart(searchContainer.getStart());
searchContext.setKeywords(keywords);
searchContext.setEnd(searchContainer.getEnd());
results = Proje
在索引的密集测试负载中,我们使用NIOFSDirectory而不是MMapDirectory。但我们仍然得到MMapDirectory的SIGSEV。还有什么我应该找的吗?这是一台Linux 64位机器。堆栈头跟踪如下所示:
请让我知道什么更多的信息将是有益的
谢谢
Java运行时环境检测到一个致命错误:
pc=0x00002AAAB285EA7、pid=2408、tid=1128642880时的SIGSEGV(0xb)
JRE版本:6.0_25-b06
Java虚拟机:Java热点(TM)64
在使用WebSphere ApplicationServer 8的集群环境中运行的JEE6应用程序有问题。
搜索索引用于UI中的快速搜索(使用Lucene),在新数据到达相应的DB层后,必须对其重新编制索引。为了实现这一点,我们将向应用程序发送一条JMS消息,然后将刷新搜索索引。
问题是,消息只到达一个集群成员。因此,只有在那里,搜索索引才是最新的。在其他服务器上,它仍然过时
如何在所有集群成员处更新搜索索引?
我可以在所有服务器上以某种方式接收消息吗?
或者有更好的方法吗?我找到了一个可能的解
我有一个简单的字符串7/f,标准标记器忽略/并生成术语向量7和f。我希望将7/f作为一个关键字,我希望建立在StandardTokenizer的基础上,但尝试修改该代码更为复杂。简单的答案是使用KeywordAnalyzer,但它将为字段值(如“7/f+8/f”)创建单个标记。如果您希望在单独的令牌中使用“7/f”和“8/f”等术语,那么您可能需要使用自己的令牌化器。在那种情况下应该做得很好StandardTokenizer在处理全文方面非常出色,但是如果它不能标记数据所使用的格式,那么就没有理
我们希望在Elasticsearch上进行搜索查询,该查询需要至少N个不同的子查询匹配项(或者,在更简单的情况下,只需要一些术语的多个匹配项)
例如,我们希望搜索术语“test”,将结果限制为出现5次或5次以上“test”的文档
有没有办法在Elasticsearch上进行这样的查询或筛选?我没有找到办法
在Lucene中有什么方法可以实现吗?您看过吗?es 1.0有一个称为聚合的功能,可以使这一点变得容易,您可以在此处阅读更多内容:
org.apache.lucene.queryParser.queryParser.parse(字符串arg0)在字符串arg0太长时抛出ParseException,有没有办法避免这个问题?问题是长度,那么我猜根本的问题是Toomanycauses异常
您可以通过增加max子句直接处理此问题,方法是调用
不过,这很有可能只是治疗症状。这通常表明,由于存在如此广泛的查询,您可能期望性能不佳。您可能会考虑尝试使用过滤器>代码> s来查询部分内容,这可能会解决问题并提高性能,或者改进查询索引的方式。
我想知道是否可以创建如下LUCENE查询:
字段1、字段2
foo,bar
福,巴兹
foo,foo
巴兹酒吧
baz,baz
酒吧,富
酒吧,酒吧
我希望能够查询并获取字段1='foo'或字段1='baz'的行,并且它们具有等效的字段2值。在本例中,返回的记录为
(foo,bar),(foo,baz),(baz,bar)和(baz,baz)您能更详细地解释一下您的要求吗?我不明白你所说的等效字段2值是什么意思,也不能从你的例子中推断出来。很抱歉,我解释得不够好。我想要field1='foo'
我很好奇#碎片在Elasticsearch中的影响。特别是,我在寻找大碎片和小碎片的利弊
例如,我有一个两节点集群。假设副本是一个,对于一个索引,我应该创建两个分散在这两个节点上的碎片吗?还是应该使用默认值,即5个碎片?我的想法是第一个
在我看来,没有理由在每个索引的每个节点上拥有多个共享,因为一个Lucene实例可以比几个Lucene实例拥有更好的缓存
编辑:
假设我只有一个节点,想要创建一个索引。在这种情况下,碎片数如何影响性能?我的想法是,在这种情况下,我应该只有一块碎片。是吗?你可以在e
这个问题感觉非常类似于这里发布的一个老问题:,但为了看看是否有任何变化,我认为再次发布最新版本的ElasticSearch是有意义的
我们正在尝试使用ElasticSearch内置的snowball词干分析器,通过搜索查询和字段映射来搜索ElasticSearch中的文本正文。性能和结果都很好,但是因为我们需要有词干文本正文进行后期分析,所以我们希望搜索结果为搜索结果中每个文档的文本字段返回实际的词干标记
该字段的映射当前如下所示:
"TitleEnglish": {
如果我有两份文件,D1有两次术语“lucene”,D2有三次术语“lucene”。我希望lucene的分数D2高于D1。请注意,D1只有两个单词(即lucene-lucene),而D3有100个单词,其中3个单词是lucene。默认的lucene评分模型将评分D1高于D2。我想禁用此模式,并将D2排名高于D1。这是我的项目需求。您需要实现一个符合您需要的相似性。您可以直接在相似性上实现,但您可能会发现只需复制ClassicSimility(DefaultSimility,在5.4版之前),并剔除
我在索引数据时使用动态绑定。比如说
{ "a" : 10 }
将为字段创建映射为long。而第二次索引时,数据可能是双{“a”:10.10}。但由于映射已经定义为尽可能长的长度,因此它将索引尽可能长的数据。解决这个问题的唯一方法是提前定义映射,由于各种原因,我不想这样做
所以我的问题是,有没有一种方法可以强制弹性搜索,将所有数字字段都视为双精度 您可以使用动态映射模板:
如果它与long匹配,则将其映射为double:
PUT my_index
{
"mappings": {
我正在使用Elasticsearch短语建议器来纠正用户的拼写错误。除非用户输入一个第一个字母拼写错误的查询,否则一切都正常工作。在这种情况下,短语suggester不返回任何内容或返回意外结果
我的文档和查询与以下示例完全相同:
第四个字母拼写错误的示例:
{
"_shards": ...
"hits": ...
"timed_out": false,
"took": 3,
"suggest": {
"simple_phrase" : [
{
我用参数-index运行Lucene官方演示-医生,控制台打印(包括pom.xml和*.java和*.class)被添加到索引中
然后我尝试使用参数-index-查询“lucene AND main”,console只打印IndexFiles.class和SearchFiles.class和IndexFiles.java,而不打印SearchFiles.java(我认为它应该是搜索结果之一)。您的搜索结果是正确的(至少对于.java文件)
示例代码使用,后者反过来使用
StandardToken
我知道它需要一个浮动,但在一个结果中,不同级别的提升的一些典型值是什么
例如:
如果我想将文档的权重提高10%,那么应该将其设置为1.1?
20%那么1.2
如果我开始将boosts设置为75.0之类的值,会发生什么?还是500.0
编辑:固定格式有关公式,请参阅。原则上,在所有其他因素相同的情况下,将文档的boost设置为1.1确实会使其得分比boost为1.0的相同文档高10%。如果您有一组在搜索中本质上应该优先使用的文档,这可能是一个好主意。请注意,文档增强是一个索引时间属性,因此不重新索
我的数据库中的Solr更新速度非常慢。数据库只有900个文档。我们使用具有以下设置的自动提交,有时自动提交会花费很长时间阻止更新:
<autoCommit>
<maxDocs>10000</maxDocs>
<maxTime>1000</maxTime>
</autoCommit>
10000
1000
有900个文档,74秒内可能发生的事情
想法
以下是日志片段:
2010年10月18日上午11:52:46
我正在使用lucene 2.9.2(.NET没有lucene 3)
“tag:C#”得到的结果与“tag:C”相同。如何允许“C#”作为搜索词?我尝试将Field.Index.analysis更改为Field.Index.NOT_analysis,但没有结果
我假设我需要转义每个标记,我该如何做呢?问题不在于查询,而在于您正在使用的查询分析器正在从查询和(如果您使用相同的分析器进行插入-您应该是)以及字段中删除“#”
您需要找到一个分析器,它可以保留这样的特殊字符,或者编写一个自定义字符
编辑:
我只是想知道Lucene是如何做到的,从源代码中我知道,当使用IndexReader初始化搜索程序时,它会打开并加载段文件,但是有没有人告诉我Lucene如何计算带有特殊字段的文档中的术语频率。
有什么特别的算法吗?我在tf上读取explan代码时无法理解,例如:
Explanation tfExplanation = new Explanation();
int d = scorer.advance(doc);
float phraseFreq = (d == doc) ? score
Solr中是否有一种方法可以使文档:
包含多个横向/纵向对
要求返回与给定用户提供的lat/long对最近的点
根据“最近点”进行排序/筛选。
我在看:
这是关于多值点的
但不确定这是否能满足我的需求
谢谢你的指点 未来参考:
使用实验Lucene空间游乐场,
有关详细的用例和解决方案,请参阅:
在我们的一个项目中,我们使用一个旧的Lucene版本(2.3.2)。我现在正在查看当前的Lucene版本(3.5.0),并尝试重新编写旧代码。在旧项目中,我们扩展了TopFieldDocCollector以在collect()方法中执行一些额外的过滤。然而,我在理解新的收集器类时遇到了一些困难,我找不到一个好的例子
1) 方法setScorer()。如何/从何处获取记分器对象
2) 方法collect()。我想我需要创建自己的收藏并存储我感兴趣的文档,对吗
3) 当扩展TopDocsCollec
我正在尝试优化我的elasticsearch方案
我有一个字段,它是一个URL-我不想能够查询或过滤它,只是检索它
我的理解是,定义为“index”:“no”的字段没有索引,但仍然存储在索引中。
(请参见中的幻灯片5)
这应该和Lucene的未索引匹配,对吗
这让我很困惑,有没有一种方法可以存储某些字段,而不会占用比其内容更多的存储空间,也不会妨碍其他字段的索引
我缺少什么?您正在查找'index'=>“not_analysisted'映射选项
此外,如果使用\u源代码,则不必指定存储=>fal
我正在寻找一种编码lucene模糊查询的方法,该查询搜索所有与确切短语相关的文档。如果我搜索“mosa employee Approvita”,结果将返回一个包含“most employee Approvita”的文档
我尝试使用:
FuzzyQeury = new FuzzyQuery(new Term("contents","mosa employee appreicata"))
不幸的是,这在经验上是行不通的。FuzzyQuery使用编辑距离,理论上,“mosa员工欣赏”应该与“大多数员
标签: Lucene
elasticsearchmultilingual
在阅读了文档、测试并阅读了stackoverflow上的许多其他问题之后:
我们的文档有多种语言的标题和描述。还有一些标记被翻译成相同的语言。系统中可能有多达30-40种不同的语言,但单个文档可能只有3或4种翻译
这是计划的文档结构:
{
"luck": {
"id": 10018,
"pub": 0,
"pr": 100002,
"loc": {
"lat": 42.7,
"lon": 84.2
},
"t": [
我计划在SOLR中使用eDismax查询解析器来增强字段中包含短语的文档。现在edismax解析器查询中有一个mm参数,因为用户键入的查询可以是任意长度(即>=1),所以我想将mm值设置为1。关于此参数,我有以下问题
是否默认设置为1
在my schema.xml中,defaultOperator被设置为“AND”“我应该将其设置为”或“以便edismax解析器在mm为1时有效
从Solr4.0开始,mm的默认值由q.op参数决定(q.op=AND=>mm=100%;q.op=OR=>mm=0%
我正在使用Sitecore 7.0在我的系统中应用搜索功能(实际上我正在将代码从Sitecore 6.5转换为Sitecore 7.0)。当我尝试使用Sitecore.Search.SearchManager.GetIndex方法获取索引时,我发现配置属性的值为null
我在6.5中的示例代码如下
webDb=Sitecore.Context.Database;
Sitecore.Data.Index.Index indx=webDb.Index[“系统”]//获取警告-已弃用的方法
Item
由于result1等于result2,因此我假设这两种用法都是正确和等效的。一个有趣的事实是,RavenDB的statistics total结果只有在以与result2相同的方式构建查询时才是正确的。但是,有谁能详细解释一下,为什么内置的result1查询是错误的,或者是一种糟糕的做法,尽管结果是等效的?知道为什么统计总结果不起作用吗
result1 = query1
.Where(first filter)
.Intersect()
使用ElastAlert框架创建一个flatline警报类型
当我在Kibana UI中使用完全相同的语法时,它会返回结果,但ElastAlert不会返回任何结果
这是我的elastalert-rule-file.xml
name: Test Flatline
type: flatline
run_every:
seconds: 15
relalert:
minutes: 0
es_host: localhost
es_port: 9200
threshold: 1
timef
标签: Lucene
azure-cognitive-search
我在Azure搜索索引中创建了一个名为machineTag的字段,其中包含以下详细信息:
"analyzers": [
{
"@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
"name": "SWMLuceneAlongWithCustomHyphenAnalyser",
"tokenizer": "keyword_v2",
"tokenFilters": [
"lowercase"
标签: Lucene
azure-cognitive-search
我在azure search的索引中有“C&&K”、“So`am`I”、“Ant | Man”、“A*B==AB”、“Ant+Man”等词
根据,用于转义特殊字符+-&&&| |!(){}[]^“~*?:\/我需要在它们前面加上反斜杠(\),对于不安全和保留字符,需要在URL中对它们进行编码
对于“C&&K”,我的搜索url=>/index/{index name}/docs?api版本=2017-11-11&search=C%5C%26%5C%26K~&queryType=full
对于“So
标签:elasticsearch Lucene
text-mining
我尝试使用弹性搜索从文本中查找最相似的标记
例如,我创建test_索引并插入两个文档:
POST test_index/_doc/17
{
"id": 17,
"tags": ["it", "devops", "server"]
}
POST test_index/_doc/20
{
"id": 20,
"tags": ["software", "hardware"]
}
因此,我希望从“我正在使用一些软件和应用程序”文本中找到“软件”标记(文本或id)
我希望有人能提供一个
我有一个包含标记的文档字段,我这样添加它:
for (Tag tag : tags) { //rock, disco, jazz
fields.add(new StringField("Tag", tag.name, Field.Store.YES))
}
现在,当我执行搜索时,我不仅希望得到有标记的文档,而且希望得到与查询匹配的标记字段中的特定索引。
例如,现在当我搜索jazz时,我还需要搜索结果index=2。要知道匹配的确切标记(因为我还使用前缀搜索和短语搜索)
基本上,文档中的每个字段如何存储在反向索引中?Lucene是否在内部为每个字段创建单独的索引?另外,假设一个查询是在一个特定的字段上,那么搜索在内部是如何工作的呢
我知道反向索引是如何工作的。但是如何在一个索引中存储多个字段,以及如何区分何时在请求时只搜索特定字段。正如我在评论中提到的,如果您想了解Lucene如何存储索引数据,可以使用SimpleTextCodec。有关更多详细信息和一些示例代码,请参见此答案。基本上,这会生成人类可读的索引文件(与通常的二进制压缩格式相反)
下面是使用Simp
上一页 1 2 ...
13 14 15 16 17 18 19 ...
下一页 最后一页 共 78 页