问题标签 [edismax]
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.
solr - 我的 multiValued 字段没有匹配
使用 edismax defType 和 multiValued 字段时,我没有得到匹配。
和 schema.xml 定义。
当我检查文档时,会返回一个完全匹配的文档。
但是当我执行以下查询时,numFound 为 0。
multiValued="false" 字段不会发生这种情况。
有任何想法吗?
solr - 反向 Solr 范围查询
我正在使用 SOLR 进行一些数据分析,但我被困在一个可能为我提供一些巨大价值的部分。
我有一个 solr 集合,其中包含许多范围的数字字段,例如:
每个最小/最大组合提供一个价格范围,高/中部分是由当前组中的项目数量按该范围得出的,我不打算讨论一些时髦的数学。
我需要用商品价格查询 solr 并取回一个价格在某个范围内的文档,我需要能够为其分配权重,以便高字段优先于 med 字段。这本质上是一个反向 RANGE 搜索。
我正在查询其他字段,所以这应该包含在权重中,这也不能在 fq 中,因为如果项目不符合这个条件,那么它可能会匹配其他字段。
到目前为止,我能够组装这个函数查询:
其中 8 是我将传递的价格,基本上这是检查价格是否在任何范围内,如果是,我将返回一个值,5 表示高,3 表示中,1 表示低. 理想情况下,我想将其包含在常规权重中,但我无法将其添加为子查询。此外,如果我尝试增强它,我会返回“无限递归检测到解析查询'pr_high_max:[8 TO *]'”
有没有人遇到过这样的事情?有任何想法吗?
此外,我可以控制正在进行的数据,因此如果这会使解析更容易,我可以轻松地对其进行按摩以以不同的方式表示范围。
提前致谢
java - Solr 查询执行
像下面这样的查询将如何执行,按什么顺序执行
我知道执行此查询时,将返回 fieldList 中提到的字段。我不明白的是如何使用指定的查询字段搜索“samplestring1”和“samplestring2”
如果可以用 SQL 来说明,我想我将能够理解搜索是如何发生的(只是为了了解幕后发生的事情)
以下是查询。请看一下,让我知道它在内部是如何工作的。query=samplestring1 AND samplestring2 defType: edismax queryFields: Exact_Field1^1.0 Exact_Field2^0.9 Field1^0.8 Field2^0.7 fieldList: Column1, Column2 resultRows: 10 startRow: 0
PS samplestring1 AND samplestring2 是查询中的一些测试字符串
字段模式示例
solr - SOLR eDISMAX 产品搜索
我是 SOLR 的新手,正在实施它来搜索我们的产品目录。我正在品牌名称、显示名称和类别字段上创建 ngram 和边缘 ngram。
我正在使用 edismax 并将 qf 定义为 displayname_nge displayname_ng category_nge category_ng brandname_nge brandname_ng。
当我搜索“维生素 c”(不带引号)时,我得到了所有的维生素。如果我用引号括起来,那么我只会得到维生素 c。问题是我不能总是用引号将查询字符串括起来,因为一个人可能会输入“chewable Vitamin c”或“vendor x Vitamin c”。我已经尝试了 mm 参数,但没有运气。我也尝试过应用不同的提升水平,但仍然没有得到预期的结果。
任何建议将不胜感激。谢谢
solr - 你能在不使用 Solr 的情况下使用 eDismax
我的应用程序使用 Lucene 4.1 并提供两种不同的搜索语法,标准查询解析器语法和 Solr 的近似 dismax 搜索。Solr 现在具有结合了这两者的 eDismax 搜索,这对于我的应用程序来说是完美的,因此我可以提供一个支持这两种语法的单一界面。
但是 eDismax 在最新版本的 Lucene 中是否可用,因为我不需要/不想为 Solr 重写我的代码?
solr - Solr 我用 dismax 得到结果,但没有用 edismax
当我在我的 solr 3.6.2 debian 服务器上使用 dismax 和 edismax 执行两次相同的查询时,我得到了 dismax 4 结果,如预期的那样,但 edismax 0 结果。
下面你会发现 3 个在同一索引上运行的示例。该索引包含一条记录“label:M025 Some-Example Record”
- Edismax 与:q=M025 没有结果。
- Dismax 与:q=M025 找到 4 个项目。
- Edismax 与:q=找到 1 个项目的示例。
为什么 EDISMAX 没有找到“M025”而是“Example”?
Solr 架构
示例 EDISMAX
示例 DISMAX
带有名称的 EDISMAX 示例
java - 在 SOLR 中使用带有短语字段的 unigram
我正在使用 solr 搜索文档并在一个字段上进行匹配,然后希望根据出现在其他字段中的关键字进行提升。
前任。
所以如果我搜索
我有一个结果
查询从描述中得到提升,而不是从关键字 1 和关键字 2 中得到提升。我知道这是因为 pf 在关键字 1 中搜索“foo bar”(带有短语 slop),而不是“foo”“bar”。我想根据单个单词进行提升。没有插件这可能吗?
我想到的事情:
我知道像 pf2 和 pf3 这样的选项,但基本上我正在寻找的是 pf1。我希望能够提升单个单词。
我不只是将关键字 1、关键字 2 添加到 qf 的原因是我不希望它们被匹配。由于关键字二有一些可能与文档没有任何关系的术语。
我可以在查询时分解查询并使用 bq
但我想为不同的字段分配不同的权重,构建查询很麻烦。
总之,我想要一个参数 a la pf1。
solr - Solr 的最小匹配(mm)和短语字段(pf)匹配
在我的请求处理程序中配置的最小匹配是 2。我的搜索查询包含两个词,即 q=termOne termTwo&defType=edismax。
这意味着必须在文档中找到 termOne 和 termTwo 才能被视为匹配项。我还在请求处理程序中将某些字段指定为 qf(查询字段)和 pf(短语字段)。
现在,文档在 qf 中定义的字段之一中匹配 termOne,并且短语“termOne termTwo”与在 pf 中定义的字段之一匹配。即使得到了这些匹配,文档也不会出现在结果中,因为它不满足 mm 标准。
有什么方法可以使 pf 中的匹配也有助于 mm 并且文档显示在结果中?
谢谢。
solr - Solr dismax 行为 - 标点符号和空格分割
我有一个 Solr 4.7.0 实例,索引中有 200 000 个文档(文件系统上每个文件一个文档),供多个用户使用。文档由关键字标识,这些关键字被索引并存储在一个名为“signature_1”的字段中。在索引期间,我删除了所有用空格替换的标点符号(感谢 ScriptUpdateProcessor),因此我的关键字在索引和字段 signature_1(字段类型签名)的存储部分中都用空格分隔。
我希望在查询期间有相同的行为:如果有人搜索
美国广播公司
我希望 Solr 进行以下搜索(使用 OR 运算符,dismax):
美国广播公司
所以基本上,我只是想让 Solr 在文档的关键字之间搜索,标点符号被删除。
上面的例子运行良好,但在某些情况下它不是这样运行的。查询
公元前
Dismax 将查询拆分为
(+(DisjunctionMaxQuery((signature_1:a)) DisjunctionMaxQuery((signature_1:"b c"))) ())/no_coord
这弄乱了我的结果的相关性(即顺序)。我尝试使用 autoGeneratePhraseQueries="True" 但没有效果。
所以我希望 Dismax 总是在空格和标点符号上分开,或者永远不要这样做(结果是一样的)。知道如何做到这一点(无需创建我的 Java Dismax 类)吗?
以下帖子与我的问题有关:
search - Solr 条件查询字段 (qf)
是否可以根据某些条件在 Solr 中定义查询字段?例如,我有三个字段文本、标题和产品。 solr 配置定义:
我在这里寻找的是仅在满足某些条件时才将“产品”作为可搜索字段包含在内,例如,如果作者:“汤姆”,那么也可以在产品中搜索。
有没有办法在查询期间使用 edismax 做到这一点?
我的替代方法是在索引期间将产品信息添加到文档的文本或标题(其中作者 = Tom),以便可以搜索。但是,如果可能的话,我会尽量避免这种情况。
任何指针将不胜感激。
-谢谢