Javascript 在弹性搜索中匹配数组,而不是循环搜索
我有一系列需要在搜索中匹配的项目。此时,我在数组中循环并对每个项目执行如下搜索:Javascript 在弹性搜索中匹配数组,而不是循环搜索,javascript,json,elasticsearch,Javascript,Json,elasticsearch,我有一系列需要在搜索中匹配的项目。此时,我在数组中循环并对每个项目执行如下搜索: var ownerList = ['owner1', 'owner2', 'owner3']; var searchResults = []; for (var i = 0; i < ownerList.length; i ++ { var query = { 'query': { 'bool': { 'must_not':
var ownerList = ['owner1', 'owner2', 'owner3'];
var searchResults = [];
for (var i = 0; i < ownerList.length; i ++ {
var query = {
'query': {
'bool': {
'must_not': {
'match': {'deleted': 'true'}
},
'must': [
{'match': {'owner': ownerList[i]}},
{'match': {'privacy': 'Public'}}
]
}
}
};
function doSearch(query) {
//do search here
searchResults.push(result);
}
}
var-ownerList=['owner1','owner2','owner3'];
var搜索结果=[];
对于(变量i=0;i
如何将数组放入查询中,并在没有循环的情况下执行搜索
我知道这可能会奏效,但我一直无法成功实施
ownerList数组中的项是包含数字、破折号和小写字母的随机字符串
谢谢!您可以对不同的值使用OR(
应
部分)。
诸如此类:
var ownerCondition = [];
for (var i = 0; i < ownerList.length; i ++ {
ownerCondition.push( "{'match': {'owner': " + ownerList[i] + "}}" );
};
var query = {
'query': {
'bool': {
'must_not': {
'match': {'deleted': 'true'}
},
'should': ownerCondition,
'must': [
{'match': {'privacy': 'Public'}}
]
}
}
};
var-ownerCondition=[];
对于(变量i=0;i
对于,您需要将您的所有者字段映射为未分析的
,有关更多信息,请参阅部分。之后,您可以将数组直接传递到术语过滤器
var ownerList = ["605ec41f-f32a-4f6f-a882-1a6d5379f9ab","006e5c63-c021-4341-8d15-b7071f54b6bf"]
var query = {
"query": {
"bool": {
"must_not": {
"match": {
"deleted": "true"
}
},
"must": [
{
"terms": {
"owner": ownerList
}
},
{
"match": {
"privacy": "Public"
}
}
]
}
}
}
现在,如果您想匹配abcd-1234以匹配abcd-1234,则需要为您的所有者
字段使用
希望这有帮助您能给我们看一些示例字符串吗?您是在寻找精确匹配还是部分匹配,例如,如果您有像solar energy
这样的字符串,您希望solar
或energy
匹配还是只匹配solar energy
?这里有两个示例字符串:605ec41f-f32a-4f6f-a882-1a6d5379f9ab,006e5c63-c021-4341-8d15-b7071f54b6bf。我需要精确匹配。谢谢:)这看起来是可行的。我对Elastic还不太熟悉,所以刚刚尝试了新的查询结构,但没有更新映射,没有得到任何点击。这是预期的吗?我正在使用Elastic搜索我的Firebase数据库。你能提供一些关于如何添加映射的建议吗?谢谢,预计你不会得到任何结果,因为默认情况下使用ES使用standard analyzer
和terms filter
正在查找确切的标记,顺便问一下,您是如何创建索引的?您是否使用了curl
命令?虽然我从未使用过Firebase手电筒,但我查看了该项目,我猜它仅用于搜索,对吗?是的,我认为仅用于搜索。如果我理解正确回答您的问题,我在Flashlight应用程序文件第63行的paths数组中配置了索引。这看起来正确吗?感谢againI尝试了这个:curl-XPUT localhost:9200/firebase-d'{“mappings”:{“post”:{“owner”:“not_analysis”}}}
但是得到了{“error”:“IndexAlreadyExistsException[[firebase]已存在],“status”:400}
。您已经非常接近了。首先您必须删除索引,运行curl-XDELETE”http://localhost:9200/firebase/“
,然后创建一个像这样的新索引curl-XPUT”http://localhost:9200/firebase/'-d'{“映射”:{“post”:{“属性”:{“所有者”:{“类型”:“字符串”“,”索引“:“not_analysisted”}”
。是文档。