小编Sae*_*any的帖子

ElasticSearch可预期的表现

我正在努力将搜索引擎从sql数据库移植到elasticsearch.这样做的主要原因是能够轻松地计算构面.

目前我们通过生成precalc表在sql上有方面.它运行良好,但维护很痛苦,只有数据子集支持facet.

现在ES原型正在工作,我正在对这两个解决方案进行基准测试,看起来ES版本在性能方面略逊于sql版本(在可维护性方面,它要好得多).

我使用了完全相同的机器配置,一个64位平台,32 GB的RAM,一个ssd磁盘和一个3ghz的四核Intel Xeon来比较sql和ES.

文档不小,大约有200个字段,根据请求,使用基于脚本的排序,并且总是在doc的8个字段上计算facet.

该索引包含3百万个文档,如果我没有记错的话它与ES可以处理的相对较小.

在查询方面,我使用过滤查询,对于某些请求,我使用custom_filters_score查询来计算得分并将其用于排序.

由于方面的原因,某些过滤器是全局的,但过滤后的查询中总会有一些过滤器,因此应减少扫描的文档数量(并非所有索引都被扫描).

我在测试中使用了两个度量:服务器执行搜索所花费的时间,以及并行运行100个线程的客户端执行的查询数量.

对于elasticsearch,每个查询在服务器上花费的平均时间大约为500毫秒(并行100个查询),客户端上的平均查询时间大约为160(构建查询,发送它时会丢失一些ms,接收结果并解析它们).这是一个索引有1个碎片和0个副本,当我增加碎片/复制品的数量时,性能显着下降.

对于sql,执行查询所花费的平均时间约为360毫秒(同上,并行运行100个查询),客户端上的平均查询次数约为200.

我知道这很难比较,但由于我对预期的结果一无所知,我想知道是否有人可以评论这些措施.

也许我错过了一些东西,它应该快一个数量级,或者这些是类似环境的典型结果,我不知道.

在我的案例中我能期待什么?您在ES的类似情况下观察到了什么?它是否支持并发请求?在同时进行100次查询时,执行查询的时间是否应该在500毫秒的范围内?有没有办法改善搜索性能?

欢迎任何信息或评论,这是决定工业化原型的重要部分.

谢谢.

performance database-performance elasticsearch

5
推荐指数
1
解决办法
2708
查看次数

elasticsearch双引号不起作用

我正在尝试使用elasticsearch搜索特定的短语,即"foo bar".我的查询类似于下面的查询:

curl -X GET "http://localhost:9200/objects/object/_search" -d '{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "\"foo bar\"",
            "default_field": "_all"
          }
        }
      ]
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

我的索引中有两个对象,看起来类似于:

{
  sub_sections: [
    {
      name: "foo"
    },
    {
      name: "bar"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

{
  sub_sections: [
    {
      name: "foo bar"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

当我在查询中使用双引号时,我期待只返回匹配短语的最后一个对象.但是,始终返回两个对象.auto_generate_phrase_queries到目前为止,我已经尝试过像++这样没有运气的选项.

这是预期的行为吗?我怎么能只返回具有完全短语匹配的文件?

elasticsearch

5
推荐指数
1
解决办法
2934
查看次数

弹性搜索范围方面的count和total_count之间有什么区别?

我正在使用范围方面进行搜索:

{
"query": {
    "match_all": {}
},
"facets": {
    "prices": {
        "range": {
            "field": "product_price",
            "ranges": [
                {"from": 0, "to": 200},
                {"from": 200, "to": 400},
                {"from": 400, "to": 600},
                {"from": 600, "to": 800},
                {"from": 800}
            ]
        }
    }
}
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到了范围的响应:

[
  {
    "from": 0.0,
    "to": 200.0,
    "count": 0,
    "total_count": 0,
    "total": 0.0,
    "mean": 0.0
  },
  {
    "from": 200.0,
    "to": 400.0,
    "count": 1,
    "min": 399.0,
    "max": 399.0,
    "total_count": 1,
    "total": 399.0,
    "mean": 399.0
  },
  {
    "from": 400.0,
    "to": 600.0,
    "count": …
Run Code Online (Sandbox Code Playgroud)

range facet faceted-search elasticsearch

5
推荐指数
1
解决办法
1314
查看次数

Elasticsearch-排序多索引查询

我建立与elasticsearch自动完成搜索,所以我需要查询3个指标postscommentsauthors。我有以下查询:

{
   "query":{
      "query_string":{
         "query":"something"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

电话:

curl -X GET 'http://localhost:9200/posts,comments,authors/_search?pretty' -d '{
  "query": {
    "query_string": {
      "query": "something"
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

我需要按特定的索引字段对结果进行排序,例如:

帖子索引有一个名为comments_count,评论votes_count和作者的字段posts_count。比较帖子时,则应按,然后是comments_count评论,然后是votes_count作者posts_count

可以这样做吗?我不想将索引合并为一个,因为它们索引完全不同的文档。

elasticsearch

5
推荐指数
1
解决办法
3385
查看次数

在logstash中为新字段设置Elasticsearch Analyzer

通过使用GROK filter,我们可以向Logstash添加新字段.

但是,在这里,我想知道如何为该特定字段设置分析器.

例如:,我有一个新的id字段,它有一个字段a_b,但是Elasticsearch发布的普通分析器会将其分解为ab.因此,我无法有效地在该特定字段上应用术语功能并使其有用.

这里对于ID字段,我想应用我自己的自定义分析器,它不会对值进行标记,而是应用小写过滤器.

如何在logstash中完成此操作.

logging elasticsearch logstash

5
推荐指数
1
解决办法
5390
查看次数

Elasticsearch建议API - 不能搜索数字

我正在使用Suggest API为餐馆名称创建自动完成功能,但我遇到了一个小问题.一些餐馆名称以数字开头,例如:

68 - 86 Bar & Restaurant
Run Code Online (Sandbox Code Playgroud)

我希望能够打字68并让餐厅回来.我尝试过使用空白分析器,但它并没有解决我的问题.

这是餐馆名称的分析输出:

{
  "tokens": [
    {
      "token": "68",
      "start_offset": 0,
      "end_offset": 2,
      "type": "<NUM>",
      "position": 1
    },
    {
      "token": "86",
      "start_offset": 5,
      "end_offset": 7,
      "type": "<NUM>",
      "position": 2
    },
    {
      "token": "bar",
      "start_offset": 8,
      "end_offset": 11,
      "type": "<ALPHANUM>",
      "position": 3
    },
    {
      "token": "restaurant",
      "start_offset": 14,
      "end_offset": 24,
      "type": "<ALPHANUM>",
      "position": 4
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

以下是重现我的问题的命令:

PUT restaurants
{ }

PUT restaurants/restaurant/_mapping
{
    "location": {
        "index_analyzer": "whitespace",
        "search_analyzer": "whitespace", 
        "properties": …
Run Code Online (Sandbox Code Playgroud)

autocomplete autosuggest elasticsearch

5
推荐指数
1
解决办法
1748
查看次数

在弹性搜索中刷新失败后分片未分配

有时,在 ElasticSearch v1.1.0 中插入新文档后,会出现 noshardavailableactionexception 错误。当检查时

curl  'localhost:9200/_cat/shards/cvk'
Run Code Online (Sandbox Code Playgroud)

我得到了答案:cvk 0 p UNASSIGNED

使用命令重新启动弹性后:

/etc/init.d/elasticsearch restart
Run Code Online (Sandbox Code Playgroud)

一切正常。

ES 在 VPS ubuntu v12 上运行,索引只有 1 个分片并且禁用复制。

我在日志中发现“设备上没有剩余空间”错误。但我的机器上有足够的磁盘空间。我正在批量上传 1000 个文档(每个文档大约 512 字节)。

如何解决冲水问题?如果不可能,如何通过 REST 接口重新分配分片(无需重新启动服务器)?

来自我的 vps 的 df

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         20G   13G  6.6G  65% /
udev            237M   12K  237M   1% /dev
tmpfs            50M  216K   49M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            246M     0  246M   0% /run/shm
Run Code Online (Sandbox Code Playgroud)

来自 vps 的日志显示错误

[2014-05-03 04:20:20,088][WARN ][index.translog           ] …
Run Code Online (Sandbox Code Playgroud)

java memory elasticsearch

5
推荐指数
1
解决办法
5293
查看次数

Rails弹性搜索聚合

不知怎的,我似乎无法得到包含我的聚合的回复......

使用curl它按预期工作:

HBZUMB01$ curl -XPOST "http://localhost:9200/contents/_search" -d '{
  "size": 0,
  "aggs": {
    "sport_count": {
      "value_count": {
        "field": "dwid"
      }
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

我收到了回复:

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 90,
    "max_score": 0.0,
    "hits": []
  },
  "aggregations": {
    "sport_count": {
      "value": 399
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是使用rails中的代码:

query = '{
  "size": 0,
  "aggs": {
    "sport_count": {
      "value_count": {
        "field": "dwid"
      }
    }
  }
}'
@response = Content.search(query).to_json
Run Code Online (Sandbox Code Playgroud)

并在浏览器中呈现它

respond_to do |format| …
Run Code Online (Sandbox Code Playgroud)

ruby elasticsearch ruby-on-rails-4

5
推荐指数
1
解决办法
4068
查看次数

MPGS 集成

我正在尝试使用新的 migs getaway (MPGS) 我遵循了下一个 url 中的代码

https://ap-gateway.mastercard.com/api/documentation/integrationGuidelines/hostedCheckout/integrationModelHostedCheckout.html
Run Code Online (Sandbox Code Playgroud)

当然我被替换了所有必填字段

<html>
<head>
    <script src="https://ap-gateway.mastercard.com/checkout/version/36/checkout.js"
            data-error="errorCallback"
            data-cancel="cancelCallback">
    </script>

    <script type="text/javascript">
        function errorCallback(error) {
              console.log(JSON.stringify(error));
        }
        function cancelCallback() {
              console.log('Payment cancelled');
        }

        Checkout.configure({
            merchant: 'xxxxxx',
            order: {
                amount: function() {
                    //Dynamic calculation of amount
                    return 80 + 20;
                },
                currency: 'USD',
                description: 'Ordered goods',
               id: 'xxxxxx'
            },
            interaction: {
                merchant: {
                    name: 'xxxxxx',
                    address: {
                        line1: '200 Sample St',
                        line2: '1234 Example Town'            
                    }    
                }
            }
        });
    </script>
</head>
<body>
    ...
    <input type="button" …
Run Code Online (Sandbox Code Playgroud)

integration bank

5
推荐指数
1
解决办法
4990
查看次数

如何在 React Native 中关注下一个字段输入?

我需要在 android 平台的 react native 中关注下一个字段输入。但是 focus() 函数,在 android react native 中不存在,只在 IOS 中存在。

这个怎么弄?我使用带有打字稿的本机反应。

在此处输入图片说明

android typescript reactjs react-native

5
推荐指数
1
解决办法
6229
查看次数