ElasticSearch 记录

本文介绍如何使用Elasticsearch进行数据索引及查询操作,包括通过REST API和Java API实现数据的增删改查,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

version: 5.4.1

step 1  下载 elasticsearch

step 2   启动  {es_dir}/bin/.elasticsearch


创建索引、put一条数据

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
  "user":"lili",
  "post_date":"2017-06-09",
  "message":"Hello, ElasticSearch!"
}'

Rest API 查询

curl -XGET 'http://localhost:9200/twitter/tweet/_search?pretty'
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "twitter",
        "_type" : "tweet",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "user" : "lili",
          "post_date" : "2017-06-09",
          "message" : "Hello, ElasticSearch!"
        }
      }
    ]
  }
}

Java API 查询

1、POM.xml

<dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>5.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>5.4.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>


2、src/main/resources 下新建 log4j2.properties文件

appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout

rootLogger.level = info
rootLogger.appenderRef.console.ref = console

3、测试(jdk版本>=1.8)

public class ESDemo {
    public static void main(String[] args) throws Exception {
        Settings settings = Settings.builder()
                .put("cluster.name", "myes")//集群名称可以在{es_dir}/conf/elasticsearch.yml中配置
                .put("client.transport.sniff", "true").build();

        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

        QueryBuilder qb = termQuery("user", "lili");

        SearchResponse response = client.prepareSearch("twitter")
                .setTypes("tweet").setQuery(qb).get();

        if (response.getHits().getTotalHits() != 0) {
            SearchHits shs = response.getHits();
            for (SearchHit sh : shs.getHits()) {
                System.out.println((sh.getSource().get("message")));
            }
        }
    }
}


4、结果




### 如何在 Elasticsearch 中添加文档 要在 Elasticsearch 中添加文档,可以使用其 RESTful API 或者通过客户端库(如 Python 的 `elasticsearch-py`)。以下是详细的说明: #### 使用 RESTful API 添加文档 可以通过 HTTP POST 请求将 JSON 数据发送到指定索引下的 `_doc` 路径。例如,假设有一个名为 `my_index` 的索引,并希望向其中添加一条记录,则请求如下所示[^2]: ```bash POST http://localhost:9200/my_index/_doc/1 Content-Type: application/json { "title": "Elasticsearch Basics", "content": "Learn how to use Elasticsearch effectively." } ``` 上述命令会创建一个新的文档并将其存储在 `my_index` 索引中。 #### 使用 Python 客户端添加文档 如果更倾向于编程方式操作 Elasticsearch,可以利用官方支持的 Python 库 `elasticsearch-py`。安装该库后,可通过以下代码片段完成相同的操作: ```python from elasticsearch import Elasticsearch es = Elasticsearch([{'host': 'localhost', 'port': 9200}]) document = { "title": "Elasticsearch Basics", "content": "Learn how to use Elasticsearch effectively." } response = es.index(index="my_index", id=1, document=document) print(response['result']) ``` 此脚本初始化了一个连接至本地运行实例的 Elasticsearch 对象,并调用了 `.index()` 方法来插入新数据条目。 #### 注意事项 当尝试解析或处理查询时遇到错误消息 `{ "valid": false, "error": "org.elasticsearch.common.ParsingException: no [query] registered for [mach]" }` ,这通常表明存在语法问题或者不被识别的关键字存在于所提交的查询之中[^1] 。因此,在构建任何类型的请求之前,请仔细验证所有的参数名称及其对应的值是否正确无误。 另外值得注意的是,尽管本文未具体提及有关冷热架构设置的内容,但在大规模生产环境中合理规划不同角色节点(比如专用暖节点)对于优化性能至关重要[^4]。 最后提醒一下,虽然这里展示了基本方法论,实际应用过程中可能还需要考虑诸如批量导入、冲突解决策略等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值