我有一个拥有数百万条记录的核心.
我想添加一个自定义处理程序,它扫描现有文档并根据条件更新其中一个字段(例如,年龄> 12).
我更喜欢在Solr服务器端进行操作,以避免将数百万个文档发送到客户端并返回.
我正在考虑编写一个solr插件,它将接收查询并更新查询文档中的一些字段(如查询处理程序删除).
我想知道是否有现有的解决方案或更好的替代方案.
我在网上搜索了一段时间,找不到更新文档的Solr插件示例(我不需要扩展更新处理程序).
我写了一个插件,它使用下面的代码,工作正常,但没有我需要的那么快.
目前我这样做:
AddUpdateCommand addUpdateCommand = new AddUpdateCommand(solrQueryRequest);
DocIterator iterator = docList.iterator();
SolrIndexSearcher indexReader = solrQueryRequest.getSearcher();
while (iterator.hasNext()) {
Document document = indexReader.doc(iterator.nextDoc());
SolrInputDocument solrInputDocument = new SolrInputDocument();
addUpdateCommand.clear();
addUpdateCommand.solrDoc = solrInputDocument;
addUpdateCommand.solrDoc.setField("id", document.get("id"));
addUpdateCommand.solrDoc.setField("my_updated_field", new_value);
updateRequestProcessor.processAdd(addUpdateCommand);
}
Run Code Online (Sandbox Code Playgroud)
但这是非常昂贵的,因为更新处理程序将再次获取我已经掌握的文档.
是否有一种安全的方法来更新lucene文档并将其写回来,同时考虑所有与Solr相关的代码,如缓存,额外的solr逻辑等?
我想将它转换为SolrInputDocument,然后只需通过Solr添加文档,但我需要先转换所有字段.
先谢谢,Avner
我正在研究Solr 4,用于根据存储在Index中的受欢迎程度对我的Solr结果排名进行优化。
现在,当有人进行搜索时,除了相关性等级之外,我还想使用受欢迎度等级来影响相关性等级。最简单的公式可能是:
新的相对排名=得分*人气排名
我一直在http://wiki.apache.org/solr/FunctionQuery#product上查看Solr函数查询,以实现相同的功能,但是我不确定如何使它工作。我不知道如何使用乘积函数获得分数。试图做到这一点,我总是得到错误,因为未定义字段。
现在,我可以使用此处定义的boost 如何在solr中增强字段,但是在要使用Solr提供的功能查询的地方,我还有其他逻辑/要求。
例如,我尝试使用以下似乎有效的简单查询
http://solr:8983/solr/select?q=hp%20laptop&defType=edismax&fl=Id,Name,score&bf=product%28$v1,$v2%29&v1=Id&v2=2
Run Code Online (Sandbox Code Playgroud)
现在,对于我的实际需求,我想将分数设为$ v2,但是我找不到如何做到这一点。
非常感谢您的帮助。
由于ZooKeeper集成,SolrCloud有一些很好的实用程序来管理和重新加载核心/集合配置.
但是,这仅仅完全涵盖了微不足道的更新 - 但也有非常重要的更新.非平凡在这种情况下,意味着产生了一些变化,使一个更新的节点和/或它的芯用一些以前的状态不兼容的.
特别是,我想到了这些子类:
我的问题是:如何使用SolrCloud和相关的Zookeeper服务来使这些更新更容易,更可靠和/或确保更高的可用性?
注意:我希望有一些"理解"此类更新的API /功能.到目前为止,我发现最值得注意的是CoreAdmin中的集合别名,这将允许"旧"和"新"版本之间更平滑的过渡 - 考虑到上述希望,这有点令人失望.
我正在尝试使用SolrCloud索引大量简单文档,并且遇到了一些性能和可伸缩性限制,并且想知道可以做些什么.
硬件方面,我有一个32节点的Hadoop集群,我用它来运行所有的Solr分片,每个节点有128GB的内存.当前的SolrCloud设置被分成4个单独的32个分片的单独云,从而每个云提供4个运行分片或每8个节点分配一个云.每个分片当前分配了6GB的堆大小.我宁愿避免增加Solr分片的堆内存,以便在集群上运行其他MapReduce作业.
我目前每天在这些云中插入的文件率在两个云中为50亿,第三个为30亿,第四个为20亿; 但是,考虑到容量,目标是扩展解决方案以支持双倍数量的文档.要为这些文档编制索引,可以运行生成Solr XML文档的MapReduce作业,然后通过SolrJ的CloudSolrServer接口提交这些文档.在测试中,我发现将每个云的活动并行插入数量限制为80可以获得最佳性能,因为任何更高的性能都会导致收益递减,这很可能是由于文档在内部不断改组为SolrCloud.从索引的角度来看,正在创建过时的集合来保存一整天的文档,并且通常插入主要发生在当天(前几天只允许搜索),并且计划最多可以保留60天(或者每个云中的集合).最繁忙的云中一个集合中的单个分片索引当前占用整个集合的30G磁盘空间或960G.文档正在自动提交,提交时间为4分钟(opensearcher = false),软提交时间为8分钟.
从搜索角度来看,用例是相当通用且简单的类型搜索:,因此无需调整系统以使用任何更高级的查询功能.因此,对我来说最重要的是使索引性能能够跟上输入的速度.
在初始负载测试中,我能够实现每天每天云计算100亿个文档的预计索引率,总计每天400亿.但是,初始负载测试是在相当空的云上完成的,只有几个小集合.现在已经有几天的文档被编入索引,一旦云在两个最大的云中达到大约15个完整集合(或每个云大约80-100亿个文档),我开始看到索引性能下降相当急剧下降.根据当前的应用程序日志记录,我发现索引性能下降了40%.因此,我担心随着更多集合的添加,性能将如何保持.
我向社区提出的问题是,是否有其他人有过以这种规模使用Solr的经验(数千亿),并且如果有人观察到索引性能随着收集数量的增加而下降.我的理解是每个集合都是一个单独的索引,因此插入率应保持不变.除此之外,还可以在SolrCloud配置中进行哪些其他调整或更改以提高索引性能的速度?我是否对Solr能够处理的事情施加了严格的限制?
我正在尝试查询数据(使用solr)并获得一天的粒度计数.
我遇到以下代码问题:
solrQuery.addDateRangeFacet("startTimeISO", date1.toDate(), date2.toDate(), "%2B1DAY");
solrQuery.setQuery(queryString);
QueryResponse response = null;
try {
response = solrClient.getSolrServer(getCollectionName(Constants.WebPeerAnomaliesModelTuple()._1())).query(solrQuery);
} catch (Exception exp) {
LOGGER.error("Failed to get facet results: ", exp);
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到的错误是:
"不能将差距%2B1DAY添加到价值2014年11月14日06:37:30太平洋标准时间2014年字段:startTimeISO"
有人可以帮我解决这个问题吗?
我不确定为什么"%2B1DAY"会失败.当我从浏览器中执行相同操作时,我得到了正确的结果.如果我从url查询下面的内容,它可以工作:/select?facet = true&facet.date = startTimeISO&facet.date.start = NOW/DAY-30DAYS&facet.date.end = NOW/DAY%2B1DAY&facet.date.gap =%2B1DAY
如果我问一个微不足道的问题,请道歉.我还在尝试调试这个.任何指针都会有所帮助.谢谢.
更新:解决方案:
我能够调试这个并找出我收到此错误的原因.
在我的Java代码中,我应该添加"+ 1Day"而不是"%2B1DAY".通过浏览器查询工作因为+是%2B(网址编码)抱歉这个愚蠢的问题.希望它可以帮助某人.:)
Liferay 6.2-ce-ga2
I'm trying to cluster two nodes, I'm using tomcat liferay bundle for both the nodes.
I used the following blog post as a reference and many others https://dev.liferay.com/discover/portal/-/knowledge_base/6-1/liferay-clustering
Both the nodes starts up as expected but they are not in sync. I dont have any errors on my console. I used the direct URL to login to a particular node and say, added an organization or published a web content article, which is not getting reflected when i …
这是我的回复数据:
"response": {
"numFound": 2,
"start": 0,
"docs": [
{
"total_amount": 10,
"id": "2"
},
{
"total_amount": 10,
"id": "1"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想得到total_amount的总和.我也试过了facet查询.但我没有得到总和.我有一些博客,但这是针对solr 5.1.http://yonik.com/solr-facet-functions/
是否可以通过某些API为Solr写入外部文件(包含外部文件字段)?
我试图找到Solr文档,但找不到任何有帮助的东西!
请根据要求提供更多详细信息。
我正在做一个项目,该项目中很少有详细信息,这些详细信息非常频繁地存储在外部文件中,与以下问题完全相同:如何在solr中读写外部文件字段?
在对Solr执行搜索查询时,我们将该字段用于某些功能查询和排序目的。这很好。
但是,此文件必须位于Solr Data目录中。因此它位于Solr的安装位置。现在考虑我的情况,我的主应用程序位于其他Windows Server上,并通过SolrNet与Solr通信。但是我的Solr实例位于专用于Solr的远程计算机上。
我的问题是:
始终欢迎其他任何建议。
我支持rails项目,它包含rails app和Solr的附加实例.
我的环境:rails 3.2.1,ruby 2.1.2,sunspot 2.1.0,Solr 4.1.6.
问题:
Clould提供商不稳定.我不能使用其他云提供商 - 这是客户的需求.通常,搜索服务器继续维护,Web应用程序停止生产.因此,我考虑如何制作2个相同的搜索服务器而不是一个,以使系统更稳定:如果一个服务器将关闭,其他服务器将继续工作.
摆脱困境的方法:
题:
是否可以使用SSL和基本身份验证配置SolrCloud?
我使用以下方法在SolrCloud中使用SSL配置了3个Solr节点:https://cwiki.apache.org/confluence/display/solr/Enabling+SSL
我在此之后添加了身份验证和授权:https: //cwiki.apache.org/confluence/display/solr/Basic+Authentication+Plugin,https://cwiki.apache.org/confluence/display/solr/Rule-基于+授权+插件
当只启用SSL时,它可以工作.
当只启用身份验证+授权时,它可以工作
当两者都启用时,我会在启动时获得以下堆栈跟踪:
2016-06-01 17:19:41.933 INFO (OverseerStateUpdate-168013962670440512-172.30.92.66:8983_solr-n_0000000079) [ ] o.a.s.c.o.ZkStateWriter going to update_collection /collections/testowa/state.json version: 1350
2016-06-01 17:19:41.935 INFO (zkCallback-4-thread-1-processing-n:172.30.92.66:8983_solr) [ ] o.a.s.c.c.ZkStateReader A cluster state change: [WatchedEvent state:SyncConnected type:NodeDataChanged path:/collections/testowa/state.json] for collection [testowa] has occurred - updating... (live nodes size: [3])
2016-06-01 17:19:41.937 INFO (zkCallback-4-thread-1-processing-n:172.30.92.66:8983_solr) [ ] o.a.s.c.c.ZkStateReader Updating data for [testowa] from [1350] to [1351]
2016-06-01 17:19:43.557 INFO (coreZkRegister-1-thread-1-processing-n:172.30.92.66:8983_solr x:testowa_shard1_replica3 s:shard1 c:testowa r:core_node1) [c:testowa s:shard1 r:core_node1 x:testowa_shard1_replica3] o.a.s.c.ShardLeaderElectionContext …Run Code Online (Sandbox Code Playgroud)