在将Rails更新到4.2.5.1并更新用户文档后,我不时会收到此异常
Elasticsearch :: Transport :: Transport :: Errors :: Conflict:[409] {"error":"VersionConflictEngineException [[users] [0] [user] [1]:版本冲突,当前[7],提供[6] ]", "状态":409}
但是,我没有在更新请求中传递任何显式版本.我想两个不同的进程正在尝试同时更新同一个文档,但除了Rails版本之外它没有任何改变.
我正在使用elasticsearch-model(0.1.8)elasticsearch-rails(0.1.8)elasticsearch(1.0.15)elasticsearch-api(1.0.15)和elasticsearch-transport(1.0.15)
elasticsearch版本是Version:1.2.2,Build:9902f08/2014-07-09T12:02:32Z,JVM:1.7.0_65
ruby-on-rails elasticsearch elasticsearch-model elasticsearch-rails
弹性索引(id,name,dept,status)中的文档集合为{1,pone,d1,m2} {2,ptwo,d1,m2},{3,ptwo,d2,m1}我想查询到通过dept获取结果组的'm2'状态.同样的结果集应包括零计数的记录为{d1:2},{d2:0}.我们如何使用Elastic Search aggs实现它?
{
"query": {
"match": {
"status": "m2"
}
},
"aggs" : {
"results" : {
"terms" : {
"field" : "dept"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
此查询返回'dept'而不计数为{d1:2}.此外,我还希望将0计数的记录设为{d1:2},{d2:0}.谢谢
我试图使用elasticsearch来匹配嵌套数组中的所有值.例如.我的搜索数组是["1","2","3","4","5","6","7","8","9"]
,我的文档包含一系列数组
"arr":[
["1","2","10"],
["4","5"],
["8","9","11"]
]
Run Code Online (Sandbox Code Playgroud)
我需要匹配嵌套数组中的所有值,但只有一个嵌套数组需要匹配文档才能匹配.所以,在这个例子中仅第二嵌套阵列是匹配,因为"4"和"5"都是本搜索数组中(因此我的文档是一个匹配).我应该使用什么样的查询来实现这一目标?
假设我们有四个带有tags字段的文档.它可以包含多个字符串,比方说foo,bar和baz.
docA.tags = ['foo']
docB.tags = ['bar']
docC.tags = ['foo', 'bar']
docD.tags = ['foo', 'baz']
Run Code Online (Sandbox Code Playgroud)
我使用聚合查询文档,因此我获得了四个文档和三个桶的列表,其中包含与特定标记匹配的计数.
buckets = [
{key: 'bar', doc_count: 2}, // docB, docC
{key: 'foo', doc_count: 3}, // docA, docC, docD
{key: 'baz', doc_count: 1} // docD
]
Run Code Online (Sandbox Code Playgroud)
如果我现在运行另一个查询,并添加这些标签中的一个-让说foo-作为一个条件过滤器来查询,我只得到了文档(docA,docC,docD有此标记).这就是我想要的.
但我还得到了另一个可能的聚合列表,其中包含更新的计数.
buckets = [
{key: 'bar', doc_count: 1}, // docC
{key: 'baz', doc_count: 1}, // docD
]
Run Code Online (Sandbox Code Playgroud)
但这些计数与发生的事情并不完全一致.它们反映了与两个标签匹配的文档数,即我在第一个位置选择的标签(foo)和一个标签(bar或 …
我已经成功配置了mongoosastic,我尝试搜索并且它工作正常,但是当涉及到前端我不确定如何实现这一点时,我尝试了很多方法但是无法想出一个好的解决方案
这是代码.
// For the Search API
router.post('/api/search/', function(req, res, next) {
Job.search(
{
query_string:
{ query: req.body.search }
} , function(err, results) {
if (err) return next(err);
res.json(results);
});
});
Run Code Online (Sandbox Code Playgroud)
因此,每当我搜索与"工程师"相关的内容时,我都会得到一个json数据
所以后端确实完美运行.
但是当涉及到jquery和ajax时,我总是得到不好的请求
逻辑:每当插入某些内容然后发布并找到该结果.
这是前端jquery代码.
$('#search').keyup(function() {
var search_term = $(this).val();
$.ajax({
type: "POST",
url: "/api/search",
success: function(){
$('search_results').html(search_term);
},
error: function(data){
alert('Error', data);
}
});
});
Run Code Online (Sandbox Code Playgroud)
HTML
<input type="text" class="form-control input-lg" id="search" name="search" placeholder="Search for part-time..." />
<div id="search_results">
</div>
Run Code Online (Sandbox Code Playgroud)
如何将json结果插入search_results?
我有两个指数my_index_1和my_index_2.在这些索引中,我有以下文档类型:
my_index_1:
my_index_2:
每种类型都有不同的字段.
我的问题: 在任何一个甚至两个索引中,在任何类型的任何字段中查询字符串"abc"的最佳方法是什么?
我没有在文档中看到任何有助于这种搜索的内容.有什么东西可能看起来像:
$ curl -XPOST 'localhost:9200/_search?pretty' -d '
{
"query": { "match": { *: "abc" } }
}'
Run Code Online (Sandbox Code Playgroud)
在此先感谢您提供的任何帮助.
我已经在互联网上找了几天,但是找不到正确的答案。也许有人可以帮忙吗?
如果我在elasticsearch中的查询没有命中,则必须在其他字段中进行搜索。如果有结果,则仅显示这些结果而不在其他字段中进行搜索。我当前的解决方案是增强字段(ean,model,imodel),但在其他字段(title,desc)中进行搜索。因此,它返回数百个不相关的项目。
{
"from": 0,
"size": "16",
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "63090300",
"fields": [
"ean^100",
"model^100",
"imodel^100"
]
}
},
{
"match": {
"title_de": {
"query": "63090300",
"boost": "5"
}
}
},
{
"match": {
"title_de": {
"query": "63090300",
"type": "phrase",
"analyzer": "trigrams",
"fuzziness": "1"
}
}
},
{
"multi_match": {
"query": "63090300",
"fields": [
"desc_de"
],
"operator": "and"
}
}
]
}
}
}Run Code Online (Sandbox Code Playgroud)
我们在ElasticSearch 2.2.0中使用了elastic4s.许多查询作为JSON存储在磁盘上,并通过elastic4s驱动程序用作rawQuery.结果中的分数在通过命令行提交的查询或elastic4s驱动程序之间不同.elastic4s驱动程序始终为所有结果返回得分1,而命令行执行产生两个不同的得分(针对不同的数据类型).
elastic4s的代码:
val searchResult = client.execute {
search in indexName types(product, company, orga, "User", "Workplace") rawQuery preparedQuery sourceInclude(preparedSourceField:_*) sort {sortDefintions:_*} start start limit limit
}.await
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了任何内容,但rawQuery preparedQuery没有更改分数1.通过命令行的完整查询很长:
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "${search}",
"fields": [
"name",
"abbreviation",
"articleNumberManufacturer",
"productLine",
"productTitle^10",
"productSubtitle",
"productDescription",
"manufacturerRef.name",
"props"
]
}
}
],
"filter": [
{
"or": [
{
"bool": {
"must": [
{
"type": {
"value": "Product"
}
},
{
"term": …Run Code Online (Sandbox Code Playgroud) 对于不再超过 256 个字符的文本字段,当该字段不需要时,在 elasticsearch 5.x 中仅存储文本的更好解决方案是什么:
选项 1) 设置映射到索引 = false 的文本
选项 2) 将映射设置为索引 = false、doc_values = false 的关键字
什么更节省空间?或者这两个映射与这些设置有什么区别?
谢谢。
我需要签署 Opensearch 请求。我正在尝试使用opensearch-js并aws-es-connection做到这一点。
import {\n createAWSConnection,\n awsGetCredentials,\n} from '@acuris/aws-es-connection';\nimport { Client } from "@opensearch-project/opensearch";\nimport { esConfig } from "./config";\n\nexport const getClient = async () => {\n const awsCredentials = await awsGetCredentials();\n const AWSConnection = createAWSConnection(awsCredentials);\n const client = new Client({\n ...AWSConnection,\n node: esConfig.uri\n });\n return client;\n};\nRun Code Online (Sandbox Code Playgroud)\n但是,此代码抱怨类型与解构...语法不兼容。
S2345: Argument of type '{ node: string; nodes?: string | string[] | NodeOptions | NodeOptions[]; Connection?: typeof Connection; ConnectionPool?: typeof ConnectionPool; ... 26 more …Run Code Online (Sandbox Code Playgroud) node.js ×2
aggregation ×1
ajax ×1
arrays ×1
elastic4s ×1
intersection ×1
jquery ×1
match ×1
mongoosastic ×1
opensearch ×1
scala ×1
search ×1