小编Sae*_*any的帖子

如何使用ElasticSearch搜索单词的一部分

我最近开始使用ElasticSearch,我似乎无法让它搜索一个单词的一部分.

示例:我在我的couchdb中有三个索引在ElasticSearch中索引的文档:

{
  "_id" : "1",
  "name" : "John Doeman",
  "function" : "Janitor"
}
{
  "_id" : "2",
  "name" : "Jane Doewoman",
  "function" : "Teacher"
}
{
  "_id" : "3",
  "name" : "Jimmy Jackal",
  "function" : "Student"
} 
Run Code Online (Sandbox Code Playgroud)

所以现在,我想搜索包含"Doe"的所有文件

curl http://localhost:9200/my_idx/my_type/_search?q=Doe
Run Code Online (Sandbox Code Playgroud)

这不会返回任何命中.但是,如果我搜索

curl http://localhost:9200/my_idx/my_type/_search?q=Doeman
Run Code Online (Sandbox Code Playgroud)

它确实返回一个文件(John Doeman).

我尝试过设置不同的分析器和不同的过滤器作为索引的属性.我也试过使用完整的查询(例如:

{
  "query": {
    "term": {
      "name": "Doe"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何作用.

当我搜索"Doe"时,如何让ElasticSearch找到John Doeman和Jane Doewoman?

UPDATE

我尝试使用nGram标记器和过滤器,就像Igor提出的那样,如下所示:

{
  "index": {
    "index": "my_idx",
    "type": "my_type",
    "bulk_size": "100",
    "bulk_timeout": "10ms",
    "analysis": {
      "analyzer": {
        "my_analyzer": { …
Run Code Online (Sandbox Code Playgroud)

elasticsearch

116
推荐指数
7
解决办法
9万
查看次数

Elasticsearch"没有添加请求"批量API错误

尝试将批量更新用于ES 1.0.1.

我在Postman内发布以下内容:

URL POSTPUThttp://localhost:9200/_bulk

请求机构:

{ "update" : { "_index" : "test_people", "_type" : "person", "_id" : "1" }} \n
{ "doc" : { "name":"hi", "age":100 }} \n
Run Code Online (Sandbox Code Playgroud)

我有没有尝试过\n.我总是得到

{
    "error": "ActionRequestValidationException[Validation Failed: 1: no requests added;]",
    "status": 500
}
Run Code Online (Sandbox Code Playgroud)

它在使用数据创建时也做同样的事情:

{
  "create": {
    "_index": "test_people",
    "_type": "person",
    "_id": "1"
  }
}
{
  "name": "hi",
  "age": 100
}
Run Code Online (Sandbox Code Playgroud)

更新

我在Mac,PC和Linux上试过这个,我不断得到同样的错误.

elasticsearch

55
推荐指数
3
解决办法
3万
查看次数

如果覆盖类的子类中的字段,子类有两个具有相同名称(和不同类型)的字段?

我有3个班:

public class Alpha {
    public Number number;
}

public class Beta extends Alpha {
    public String number;
}

public class Gama extends Beta {
    public int number;
}
Run Code Online (Sandbox Code Playgroud)

为什么以下代码编译?而且,为什么测试通过没有任何运行时错误?

@Test
public void test() {
    final Beta a = new Gama();
    a.number = "its a string";
    ((Alpha) a).number = 13;
    ((Gama) a).number = 42;

    assertEquals("its a string", a.number);
    assertEquals(13, ((Alpha) a).number);
    assertEquals(42, ((Gama) a).number);
}
Run Code Online (Sandbox Code Playgroud)

java subclassing jls

51
推荐指数
2
解决办法
4万
查看次数

ElasticSearch - 高索引吞吐量

我正在对ElasticSearch进行基准测试,以实现非常高的索引吞吐量目的.

我目前的目标是能够在几小时内索引30亿(3,000,000,000)个文档.为此,我目前有3台Windows服务器机器,每台机器有16GB RAM和8个处理器.正在插入的文档具有非常简单的映射,仅包含少数非分析的数字字段(_all已禁用).

我能够使用这个相对适中的装备每秒达到大约120,000个索引请求(使用大桌面进行监控),我相信可以进一步提高吞吐量.我正在使用一些.net NEST客户端来发送索引批量请求,批量处理1500个索引操作.

不幸的是,每秒120k请求的吞吐量不会持续很长时间,并且速率逐渐降低,在几个小时后降至~15k.

监控机器显示cpu不是瓶颈.但是,所有机器上的物理磁盘(而不是SSD)空闲时间似乎都在下降,平均闲置率低于15%.

设置refresh_interval为60s,而不是300s,最后是15m,似乎没什么帮助.在单个分片中监视单个translog,显示translog每30分钟刷新一次,然后达到200MB.

我尝试过使用两种分片策略:

  1. 1个索引,有60个分片(没有副本).
  2. 3个索引,每个20个分片(没有副本).

这两种尝试都会产生相当类似的体验,我认为这是有意义的,因为它是相同数量的分片.

看一下这些片段,我可以看到大多数分片都有~30个已提交的片段,以及相似数量的可搜索片段.细分市场规模各不相同 有一段时间,尝试使用max_num_segments = 1来优化索引,在完成之后似乎有所帮助(花了很长时间).

在任何时候,从一开始就开始整个摄取过程,在删除使用过的索引并创建新索引之后 - 导致相同的行为.最初的高指数吞吐量,但逐渐减少,早在达到30亿文件的目标之前.此时的索引大小约为120GB.

我正在使用ElasticSearch 1.4版本.Xms和Xmx配置为8192MB,可用内存的50%.索引缓冲区设置为30%.

我的问题如下:

  1. 假设磁盘目前是这个装备的瓶颈,这种逐渐增加磁盘利用率的现象是正常的吗?如果没有,可以做些什么来否定这些影响呢?
  2. 我是否可以通过微调来提高索引吞吐量?我是不是该?或者我应该向外扩展.

throughput elasticsearch

37
推荐指数
1
解决办法
2万
查看次数

为什么我不能通过Java API连接到ElasticSearch?

我无法通过Java API连接到vanilla ElasticSearch集群.

重现:

#start elasticsearch
elasticsearch -f

#checking in a new window
$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{\
    "user" : "kimchy",\
    "post_date" : "2009-11-15T14:12:12",\
    "message" : "trying out Elastic Search"\
}'
Run Code Online (Sandbox Code Playgroud)

结果:

{
  "ok": true,
  "_index": "twitter",
  "_type": "tweet",
  "_id": "1",
  "_version": 3
}
Run Code Online (Sandbox Code Playgroud)
$ curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=user:kimchy'
Run Code Online (Sandbox Code Playgroud)

结果:

{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.30685282,
    "hits": [
      {
        "_index": "twitter",
        "_type": "tweet",
        "_id": "1",
        "_score": …
Run Code Online (Sandbox Code Playgroud)

java elasticsearch

25
推荐指数
1
解决办法
3万
查看次数

无法使用Java API连接到ElasticSearch服务器

我正在尝试使用Java API连接到ElasticSearch服务器.我使用elasticsearch服务来启动/停止和弹性搜索头来可视化集群.群集/节点处于活动状态,REST API在9200上通过卷曲工作正常.我已经阅读了关于此主题的几乎所有帖子,但我无法使其工作,下面是我的详细信息:

我尝试了所有这些:

  1. 在TransportClient中使用localhost,devhost1,127.0.0.1或网络上的实际IP
  2. 取消注释config.yaml中的IP属性并放置127.0.0.1(服务器)
  3. 检查端口9300是否可用,它是.

... 9200/_cluster /节点

{
  "ok": true,
  "cluster_name": "test",
  "nodes": {
    "NLVBbJpJTZWefeI2kQt3Tg": {
      "name": "inventory_management",
      "transport_address": "inet[/127.0.0.1:9300]",
      "hostname": "devhost1",
      "version": "0.90.5",
      "http_address": "inet[/127.0.0.1:9200]"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

... 9200/_cluster /健康?漂亮=真

{
  "cluster_name" : "test",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0
}
Run Code Online (Sandbox Code Playgroud)

Java代码:

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "test").put("node.name", "inventory_management").build();
Client client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress("localhost", …
Run Code Online (Sandbox Code Playgroud)

java elasticsearch

21
推荐指数
2
解决办法
4万
查看次数

是否可以使用ElasticSearch别名写入多个索引?

ElasticSearch文件上写着:

别名也可以映射到多个索引,并且在指定别名时,别名将自动扩展为别名索引.

但是当我尝试为两个索引添加一个别名并写入两个索引时,似乎都没有更新文档.如果我删除其中一个别名,它将正确写入仍然存在的别名.

多个写别名失败:

$ curl -XGET 'http://localhost:9200/_aliases'
Run Code Online (Sandbox Code Playgroud)

结果:

{
  "dev_01": {
    "aliases": {
      "dev_read": {},
      "dev_write": {}
    }
  },
  "dev": {
    "aliases": {
      "dev_write": {}
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用单个别名:

$ curl -XGET 'http://localhost:9200/_aliases'
Run Code Online (Sandbox Code Playgroud)

结果:

{
  "dev_01": {
    "aliases": {
      "dev_read": {},
      "dev_write": {}
    }
  },
  "dev": {
    "aliases": {}
  }
}
Run Code Online (Sandbox Code Playgroud)

elasticsearch是否支持写入多个索引?如果指向多个索引,别名是只读的吗?

elasticsearch

18
推荐指数
1
解决办法
8261
查看次数

Elasticsearch删除映射属性

我试图找出一种方法来删除elasticsearch索引中特定属性的所有条目,并删除该属性的所有类型映射.

我一直在查看以下两个doc页面:put mappingdelete mapping

从第二个链接:

"允许删除映射(类型)及其数据.REST端点是/ {index}/{type},带有DELETE方法."

我认为我需要的是/{index}/{type}/{property}什么?

我是否需要重新创建整个索引来完成此操作,即在类型之间移动和操作数据?

例如,在映射上调用GET:

curl -XGET 'http://.../some_index/some_type/_mapping'
Run Code Online (Sandbox Code Playgroud)

结果:

{
  "some_type": {
    "properties": {
      "propVal1": {
        "type": "double",
        "index": "analyzed"
      },
      "propVal2": {
        "type": "string",
        "analyzer": "keyword"
      },
      "propVal3": {
        "type": "string",
        "analyzer": "keyword"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在此删除操作之后propVal3将返回:

curl -XGET 'http://.../some_index/some_type/_mapping'
Run Code Online (Sandbox Code Playgroud)

结果:

{
  "some_type": {
    "properties": {
      "propVal1": {
        "type": "double",
        "index": "analyzed"
      },
      "propVal2": {
        "type": "string",
        "analyzer": "keyword"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并且propVal3将通过索引删除所有数据.

lucene rest json elasticsearch

16
推荐指数
2
解决办法
2万
查看次数

Elasticsearch:使用jdbc-rivers设置父/子

我正在使用jdbc-river从Sql Server数据库/表中读取数据.截至目前,我已为数据库中的每个表创建了一个单独的类型.作为我实现的下一步,我想使用父/子类型,以便我可以翻译我的sql表之间的关系并存储它们.

Table1
Col_id| name| prop1|prop2|prop3

child_table1
col_id| table_id| child_prop1|child_prop2|child_prop3


curl -XPUT 'localhost:9200/_river/parent/_meta' -d '{
    "type" : "jdbc",
    "jdbc" : {
        "driver" : "com.mysql.jdbc.Driver",
        "url" : "jdbc:mysql://localhost:3306/test",
        "user" : "",
        "password" : "",
        "sql" : "select * from table1",
        "index" : "index1",
        "type" : "parent"
    }
}'

curl -XPUT 'localhost:9200/_river/child/_meta' -d '{
    "type" : "jdbc",
    "jdbc" : {
        "driver" : "com.mysql.jdbc.Driver",
        "url" : "jdbc:mysql://localhost:3306/test",
        "user" : "",
        "password" : "",
        "sql" : "select * from child_table1",
        "index" : "index1",
        "type" …
Run Code Online (Sandbox Code Playgroud)

sql-server parent-child elasticsearch elasticsearch-jdbc-river

16
推荐指数
1
解决办法
2762
查看次数

Elasticsearch - 在过滤器中组合query_string和bool查询

是否有可能结合起来query_string,并bool queryfilter query

例如 -

{
  "filter": {
    "query_string": {
      "query": "field:text"
    }
  },
  "bool": {
    "should": {
      "match": {
        "field": "text"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

lucene query-string elasticsearch booleanquery

15
推荐指数
1
解决办法
1万
查看次数