我目前正在尝试将基于Solr的应用程序迁移到Elasticsearch。
我有这个lucene查询
((
name:(+foo +bar)
OR info:(+foo +bar)
)) AND state:(1) AND (has_image:(0) OR has_image:(1)^100)
据我了解,这是MUST子句与布尔OR的组合:
“获取所有包含(名称中包含foo AND条)或(信息中包含foo AND条)的所有文档。在此之后,按条件state = 1过滤结果,并增强具有图像的文档。”
我一直在尝试将布尔查询与MUST一起使用,但是我无法将布尔OR放入must子句中。这是我所拥有的:
GET /test/object/_search
{
"from": 0,
"size": 20,
"sort": {
"_score": "desc"
},
"query": {
"bool": {
"must": [
{
"match": {
"name": "foo"
}
},
{
"match": {
"name": "bar"
}
}
],
"must_not": [],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
}
}
如您所见,“信息”的必填条件缺失。
有没有人有办法解决吗?
非常感谢。
更新
我已经更新了我的Elasticsearch查询并摆脱了该功能得分。我的基本问题仍然存在。
我终于设法创建了一个查询,该查询完全可以实现我想要的功能:
过滤的嵌套布尔查询。我不确定为什么没有对此进行记录。也许有人可以告诉我?
这是查询:
GET /test/object/_search
{
"from": 0,
"size": 20,
"sort": {
"_score": "desc"
},
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"state": 1
}
}
]
}
},
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"name": "foo"
}
},
{
"match": {
"name": "bar"
}
}
],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"info": "foo"
}
},
{
"match": {
"info": "bar"
}
}
],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
}
],
"minimum_should_match": 1
}
}
}
}
}
在伪SQL中:
SELECT * FROM /test/object
WHERE
((name=foo AND name=bar) OR (info=foo AND info=bar))
AND state=1
请记住,它是如何在内部处理name = foo的,这取决于您的文档字段分析和映射。这可以从模糊行为到严格行为不等。
“ minimum_should_match”:1表示,应该至少一个should语句为真。
此语句意味着只要结果集中有一个包含has_image:1的文档,它就会增加100倍。这将更改结果的顺序。
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
玩得开心:)
我目前正在尝试将一个基于Solr的应用程序迁移到ElasticSearch。 我有这个lucene查询 根据我的理解,这是一个必须子句与布尔OR结合的组合: “获取名称中包含(foo和bar)或信息中包含(foo和bar)的所有文档。之后,根据条件筛选结果state=1,并增强具有图像的文档。” 我一直试图在MUST中使用bool查询,但未能将boolean或转换为MUST子句。以下是我的资料:
问题内容: 我想在CI中组合AND OR mysql查询。我已经看过这个线程:http : //codeigniter.com/forums/viewthread/92818/。但是他们没有提供确切的解决方案。 如何严格使用CI框架创建以下查询? (我可以轻松地创建查询而无需使用方括号,但是它不是同一查询。) PS:这只是一个示例查询,即使没有意义,也不建议将查询的整个OR部分写在一个内。 编辑:
问题内容: 我想在Monoose中将两个OR查询与AND结合在一起,例如以下SQL语句: 我在NodeJS模块中尝试了此操作,该模块仅从主应用程序获取模型对象: 但这是行不通的,所有OR条件都将像下面的SQL语句一样连接在一起: 如何在猫鼬中结合AND 和AND 的两个条件? 问题答案: 直接按以下方式创建查询对象可能是最简单的: 但是,您也可以使用最新的3.x Mongoose版本中提供的帮助程
问题内容: 我试图创建一个非常动态的宏,该宏将根据用户的选择更新数据库中的不同表。每个表当然都有不同的标题和信息。我在更新时遇到问题(当用户将新记录添加到旧表时)。这是代码的一部分,问题是当它到达“ .update”时,出现“操作必须使用可更新查询”错误。 问题答案: 舍弃此行: 或者像这样尝试: 请参阅MSDN上的CursorLocation属性(ADO)的“备注”部分: “如果 CursorL
问题内容: 对于jdbc程序,我需要将连接建立为excel数据库。该连接已成功建立,但在其中输入了值,则给出了“操作必须使用可更新查询”的异常。 这是代码: 问题答案: 您是否特别指出连接已在您的连接字符串中被读写? 我不熟悉JDBC,但ODBC将是: 默认情况下,Excel是只读的:http : //support.microsoft.com/kb/257819
问题内容: 对于相当简单的表结构,即。 ie. Person, Criteria, and PersonCriteria (the combi-table),我现在设置了一个查询,以选择具有所有选定条件的所有人员。 此刻查询本身看起来像这样: 到目前为止,没有问题,一切正常。 现在,我想为用户提供在搜索中添加一些AND和OR变量的可能性。有人会说: 我正在寻找一个拥有以下条件的人:条件1 AND