问题标签 [solr-query-syntax]
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.
search - Solr 条件查询字段 (qf)
是否可以根据某些条件在 Solr 中定义查询字段?例如,我有三个字段文本、标题和产品。 solr 配置定义:
我在这里寻找的是仅在满足某些条件时才将“产品”作为可搜索字段包含在内,例如,如果作者:“汤姆”,那么也可以在产品中搜索。
有没有办法在查询期间使用 edismax 做到这一点?
我的替代方法是在索引期间将产品信息添加到文档的文本或标题(其中作者 = Tom),以便可以搜索。但是,如果可能的话,我会尽量避免这种情况。
任何指针将不胜感激。
-谢谢
sorting - 在 Solr 中按特定顺序按多个字段排序
所以我想按以下字段对我的 Solr 响应进行排序:
- 出版年份(递减)
- 系列号(升序)
- 状态颜色
问题是status_color
必须按以下值排序(ei 不是按字母顺序):
- “绿色的”
- “黄色”
- “红色的”
该字段只能包含这些值之一。
我希望有一种在 Solr 查询中执行此操作的方法,而不是在代码中按摩结果。由于有成百上千的文件,这并不是一个真正的选择。
任何帮助表示赞赏。
solr - 如果函数需要检查 Solr 中的范围
我们只是为知识库建立一个 Solr 索引,我在实现提升时遇到了一些问题。首先:我们希望有乘法提升而不是加法。
并且:文档的点击次数越多,它应该被提升的越多,但只是在一定程度上。首先,我们想到了 boost=sum(div(hits,10000),1) 之类的函数,但这会过多地推动某些文档。
所以我们想到了这样的事情(除了其他一些,但这些都有效,只有这些给我一个错误):
错误是:
因此,显而易见的原因是 if 函数中的范围,如果我用单个值删除它,一切正常,但这并没有真正帮助我。
所以我的问题是:是否不可能将“if()”函数与一系列值相匹配?我知道我可以尝试一百万种不同的方法来解决这个问题,但实际上我们会很高兴以这样的方式拥有它,因为 boost 参数值可以针对不同的范围进行配置,并且很容易让该语法与我们的访问 Solr 的框架。
但是,如果没有机会让它运行,我当然愿意接受替代解决方案。
非常感谢,
马库斯
java - Solr:如何在 Boost 函数查询中添加条件
我正在尝试查看是否可以在 Solr boost 函数查询中使用条件。现在,我正在使用以下函数来提升 Likes 数据。
我想做的是根据某些条件对“喜欢”应用提升。例如
如果 Source="A" 或 "B" 或 "C",则 sum(Likes,4)
else-if Source="D" then sum(Likes,3)
否则总和(喜欢,2)。
“if”函数适用于单个条件,但不确定如何处理 if-else 条件。
由于性能开销,我试图避免嵌套查询。
任何指针将不胜感激。
-谢谢,
沙米克
solr - 如果属性的值在列表中,则提升 Solr 结果
我有一个类似的查询:
我需要提高 user_id_i:(123 OR 222 OR 512 OR 932) 的结果
类似于 => __val_:"if(user_id_i:(123 OR 222 OR 512 OR 932), 100, 0)"
但很明显,我需要一个针对该特定问题返回 true 或 false 的函数。
solr - Solr 的分面范围查询。无法解析字段的间隙 1、2、3、10
我正在尝试查询数据(使用 solr)并获得城堡粒度。
我有一个Solr 4.10的本地运行实例。
在乞讨中,我做了简单的查询,例如在 solr wiki 中进行范围分面: Solr examples for range faceting
我尝试了以下查询:
此查询的网址:
我得到的错误是:
“无法解析字段的间隙 1,2,3,10:castid”
我做错了什么还是不可能以这种方式制作范围?
solr - solr 查询:匹配 n 个单词中的 x 个
据说我有4
单词(让我们称它们a,b,c
为d
示例),我想搜索solr
以匹配3
这些单词。我可以编写一个包含所有排列的查询,如下所示:
这将起作用并匹配具有这 4 个单词中的 3 个的文档。
但是当我有10
单词并且需要匹配其中 3 个单词时,事情就会变得一团糟。所需的排列数量呈指数增长。
显然由于查询的复杂性,solr 被破坏(响应速度太慢)
我已经在互联网上搜索了是否有一个特殊的命令可以用于这样的事情。我什么也找不到。我只是想知道是否有任何技巧可以完成这样的事情。
indexing - Solr 结果分组错误。字段“供应商”的意外文档值类型 SORTED_SET(预期 = SORTED)
我有一个像这样的 solr 架构
我正在查询架构,结果是这样的
我想按供应商字段对结果进行分组,所以我发布这样的查询
我在调试字段中收到此错误。
“错误”:{ “msg”:“org.apache.solr.client.solrj.SolrServerException:没有可用的实时 SolrServers 可用于处理此请求:[ http://10.192.17.110:7574/solr/gettingstarted_shard2_replica1 , http:// 10.192.17.110:8983/solr/gettingstarted_shard1_replica2 , http://10.192.17.110:7574/solr/gettingstarted_shard1_replica1 , http://10.192.17.110:8983/solr/gettingstarted_shard2_replica2] ", "trace":"org.apache .common.SolrException:org.apache.solr.client.solrj.SolrServerException:没有可用于处理此请求的实时 SolrServers:[ http://10.192.17.110:7574/solr/gettingstarted_shard2_replica1, http://10.192.17.110:8983/solr/gettingstarted_shard1_replica2 , http://10.192.17.110:7574/solr/gettingstarted_shard1_replica1,http://10.192.17.110:8983/solr/gettingstarted_shard2_replica2 ] _ \n\tat org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:342)\n\tat org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143)\n\tat org.apache.solr.core.SolrCore.execute(SolrCore.java:1984)\n\tat org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:829)\n\tat org.apache.solr. servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:446)\n\tat org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:220)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain。 doFilter(ServletHandler.java:1419)\n\tat org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:247)\n\tat org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java: 210)\n\tat org.eclipse.jetty.servlet.ServletHandler$CachedChain。doFilter(ServletHandler.java:1419)\n\tat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)\n\tat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler. java:137)\n\tat org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)\n\tat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) \n\tat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)\n\tat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)\n\tat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)\n\tat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)\n\tat org. eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)\n\tat org.eclipse.jetty.server.handler。ContextHandlerCollection.handle(ContextHandlerCollection.java:255)\n\tat org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)\n\tat org.eclipse.jetty.server.handler.HandlerWrapper。句柄(HandlerWrapper.java:116)\n\tat org.eclipse.jetty.server.Server.handle(Server.java:368)\n\tat org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:第 489 章org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1004)\n\tat org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:640)\n\tat org.eclipse。 jetty.http.HttpParser。parseAvailable(HttpParser.java:235)\n\tat org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)\n\tat org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run( SocketConnector.java:264)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool .java:543)\n\tat java.lang.Thread.run(Thread.java:745)\n引起:org.apache.solr.client.solrj.SolrServerException:没有可用的实时 SolrServers 可用于处理此请求:[QueuedThreadPool.runJob(QueuedThreadPool.java:608)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)\n\tat java.lang.Thread.run(Thread.java :745)\n原因:org.apache.solr.client.solrj.SolrServerException: 没有可用的实时 SolrServers 可用于处理此请求:[QueuedThreadPool.runJob(QueuedThreadPool.java:608)\n\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)\n\tat java.lang.Thread.run(Thread.java :745)\n原因:org.apache.solr.client.solrj.SolrServerException: 没有可用的实时 SolrServers 可用于处理此请求:[http://10.192.17.110:7574/solr/gettingstarted_shard2_replica1 , http://10.192.17.110:8983/solr/gettingstarted_shard1_replica2 , http://10.192.17.110:7574/solr/gettingstarted_shard1_replica1 , http://10.192: 8983/solr/gettingstarted_shard2_replica2]\n\tat org.apache.solr.client.solrj.impl.LBHttpSolrClient.request(LBHttpSolrClient.java:349)\n\tat org.apache.solr.handler.component.HttpShardHandlerFactory.makeLoadBalancedRequest(HttpShardHandlerFactory.java:226) \n\tat org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:224)\n\tat org.apache.solr.handler.component.HttpShardHandler$1.call(HttpShardHandler.java:184) \n\tat java.util.concurrent.FutureTask.run(FutureTask.java:262)\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)\n\tat java.util. concurrent.FutureTask.run(FutureTask.java:262)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor. java:615)\n\t... 1 更多\n原因:org.apache.solr.client.solrj.impl。HttpSolrClient$RemoteSolrException:来自服务器的错误 http://10.192.17.110:8983/solr/gettingstarted_shard1_replica2:字段“供应商”的意外文档值类型 SORTED_SET(预期 = SORTED)。使用 UninvertingReader 或 index with docvalues。\n\tat org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:556)\n\tat org.apache.solr.client.solrj.impl.HttpSolrClient .request(HttpSolrClient.java:233)\n\tat org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:225)\n\tat org.apache.solr.client.solrj.impl .LBHttpSolrClient.doRequest(LBHttpSolrClient.java:370)\n\tat org.apache.solr.client.solrj.impl.LBHttpSolrClient.request(LBHttpSolrClient.java:338)\n\t... 9 更多\n", “代码”:500}}
请帮帮我。
solr - 如何从 Solr 集合中检索所有字段?
想象一下我有一个有 10 个节点的 Solr 集群。我创建了一个集合名称“Test”(numShards=10,replicationFactor=1)并添加了 1000 个具有 2 或 3 个不同模式的文档(例如:doc1(id,field1,field2),doc2(id,field3,field4),doc3( id, field1, field5),...) 进入“测试”。
我可以检索任何分片的所有字段,例如shard1有字段id, field1, field3, field4, field5;shard2有字段id, field2, field3, field5 ,...但我不知道如何检索“测试”集合的所有字段(在这种情况下它们应该是id, field1, field2, field3, field4, field5)从shard1 到 shard10检索字段,然后加入结果并删除重复项。是否有另一种方式/更好的方式来检索 Solr 集合中的所有字段?
谢谢你。
solr - 是否可以根据流行度在 DBpedia 中进行搜索
我使用不同字段的所有 DBpedia 记录进行查询,
数据存储在solr
其中,并根据查询获取所有人的记录。
我想知道有没有办法根据受欢迎程度来获取 DBpedia 记录?