我有个问题。在常见的购物车网站有功能搜索产品与多个过滤器。例如,我正在搜索运动装备与一些过滤器,如:
>
制造商
选项
这是我的地图
PUT test/product/_mapping
{
"product":{
"properties" : {
"name" : {"type" : "string", "store":"yes"},
"manufacturer" {"type": "string}
"options" : {
"type": "nested"
}
}
}
}
部分测试数据
POST test/product/1
{
"name": "Shirt 1",
"manufacturer": "Adidas",
"options":[
{
"Color" : ["Red", "Green"]
},
{
"Size" : ["S","M","L"]
}
],
"price":250000
}
POST test/product/2
{
"name": "Shirt 2",
"manufacturer": "Nike",
"options":[
{
"Color" : ["Blue", "Green", "White"]
},
{
"Size" : ["S", "L", "XL"]
}
],
"price":100000
}
POST test/product/3
{
"name": "Shirt 3",
"manufacturer": "Umbro",
"options": [
{
"Color" : ["Red"]
},
{
"Size" : ["S","XXL"]
}
],
"price": 300000
}
有了这个查询,一切都很好
POST test/product/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "options",
"filter": {
"bool": {
"must": [
{
"terms": {
"options.Color": [
"white"
]
}
}
]
}
}
}
},
{
"term": {
"manufacturer": "nike"
}
}
]
}
}
}
}
}
但是,如果我在选项过滤器中添加更多的条件,我没有得到结果
POST test/product/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"nested": {
"path": "options",
"filter": {
"bool": {
"must": [
{
"terms": {
"options.Color": [
"white"
]
}
},
{
"terms": {
"options.Size": [
"s"
]
}
}
]
}
}
}
},
{
"term": {
"manufacturer": "nike"
}
}
]
}
}
}
}
}
我不知道我在映射或查询中是否错了,或者您能告诉我在这种情况下创建映射的最佳方法是什么。谢谢你所有的帮助。
这里的问题是嵌套
类型的用法。您的嵌套
筛选器不是对所有子级进行计算,而是对每个子级进行单独计算。由于没有一个嵌套对象能够满足筛选(同时具有color
和size
),因此不会得到任何结果。您有两种选择:
>
将这些单独的嵌套对象合并在一起
POST test/product/1
{
"name": "Shirt 1",
"manufacturer": "Adidas",
"options":[
{
"Color" : ["Red", "Green"],
"Size" : ["S","M","L"]
}
],
"price":250000
}
您的映射和查询保持不变。
不要使用嵌套
类型,而是使用简单的对象
类型。您必须更改选项
的映射:
PUT test/product/_mapping
{
"product":{
"properties" : {
"options" : {
"type": "object"
}
}
}
}
POST test/product/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"options.Color": [
"white"
]
}
},
{
"terms": {
"options.Size": [
"s"
]
}
},
{
"term": {
"manufacturer": "nike"
}
}
]
}
}
}
}
}
"options":[
{
"Color" : "Blue",
"Size": "S"
},
{
"Color": "Red",
"Size" : "L"
}
]
如果你想筛选蓝色和S的项,那么你就必须使用嵌套筛选器。
我对Elasticsearch相当陌生,所以这是我的问题。我想用elasticsearch做一个搜索查询,想用多个术语过滤。 如果我想搜索用户'Tom',那么我希望获得用户'is active=1'、'is private=0'和'is owner=1'的所有匹配项。 这是我的搜索查询 谢谢你的帮助!!
我有一个关于书籍的数据集,每本书都可以是一种或多种语言的。每个用户都注册为拥有一种或多种语言。 当用户搜索书籍时,我只想返回那些他们理解所有语言的书籍。 例如,系统中有以下两本书: 如果John被注册为懂英语、德语、法语和意大利语,那么他的查询结果永远不应该包括Book B。 我的系统目前是使用Apache Solr编写的,最后我编写了一个插件来执行子集操作(如果记录的语言是用户语言的子集,则该记
因此,我成功地在所有列出的日志中获得了警报日志(由于根已经在INFO中,所以大量的工作都是徒劳的)。但我真正想要的是,现在只在我的新appender上获得来自某个特定类的信息。 我不确定我已经很好地描述了这一点,而且我不了解log4j,所以如果需要,请要求澄清。这个难题与限制我的新appender警告和更大有关,除了我还想要一个特定类的Info。这个类的这些信息也应该发送到父记录器通常记录信息的每
我对验证FIR滤波器感兴趣。我已经实现了一个移动平均FIR滤波器,并编写了几个刺激来验证。 第一个刺激是一个正弦波,我希望滤波器按原样通过。档案员有。第二个刺激,我只传递一个冲动,并期望协效出现在输出上。这是我实际看到的。 然而,我觉得有两个问题需要注意。首先,不能依赖于波形形状来判断滤波器是否工作。我必须有可量化的值,并使用它作为一个基础,以得出结论,如果过滤器是工作的。例如。信噪比... 以下
作为参考,我使用的是Elasticsearch 6.4.0 我有一个Elasticsearch查询,它返回一定的命中视频数,我正在尝试删除文本字段值过于相似的命中。我的查询是: 此查询使用自定义函数分数和筛选器来返回用户可能喜欢的书籍(他们尚未创作的书籍)。对于某些人来说,它返回的名字非常相似的书(即乔治·华盛顿的一生,乔治·华盛顿的美好时光,谁是乔治·华盛顿),我希望热门歌曲有一套更多样化的名字
我想明白的是。 如何给出多个筛选器表达式,例如,我想从服务器获取.csv和.xml文件。 如何忽略单个文件类型,例如,我想只忽略具有.txt类型的文件,并获取rest文件。