我正在使用 elasticSearch 测试 Spring 数据。ES 服务器在同一个房间的远程服务器上运行。
我每天创建一个索引,使用别名。我试图找到一条简单的推文。但是当我尝试 a 时findOne()
,它似乎不起作用,因为它总是返回null
。
另外,findAll(ids)
因为我使用的是别名,所以不起作用,但我在文档中找不到如何处理这个问题。
我想达到什么目标?
目前,只需检索一条带有给定id_str
.
count 方法有效, findOne 无效
这是我的问题
我应该怎么做findOne()
才能工作?
我应该使用哪种方式搜索此别名中的多个索引?
这是数据在 ES 中的样子
{
"id_str" : "135131315100051",
"..." : "...",
"user" : {
"id_str" : "15843643228"
"..." : "..."
}
}
我的模型
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Document(indexName = "alias", type = "tweets")
public class Tweet
{
@Id
@Field(type = FieldType.String)
private String idStr;
public String getIdStr()
{
return idStr;
}
public void setIdStr(final String idStr)
{
this.idStr = idStr;
}
@Override
public String toString()
{
return "{ id_str : " + idStr + " }";
}
}
别名是alias
,索引是alias_dd-mm-yyyy
我的存储库
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import com.thales.communications.osintlab.bigdata.webservices.models.Tweet;
public interface EsTweetRepository extends ElasticsearchRepository<Tweet, String>
{
Tweet findByIdStr(String idStr);
}
我的测试
@Test
public void shouldReturnATweet()
{
//lets try to search same record in elasticsearch
final Tweet tweet1 = tweetRepository.findOne("593768150975512576");
//final Tweet tweet = tweetRepository.findByIdStr("593897683661824000");
System.out.println("Count is " + tweet1);
//System.out.println("Count is " + tweetRepository.count());
// System.out.println(tweet.toString());
}
当然,具有测试 ID 的推文存在 :)。并且count()
工作正常。
谢谢你的帮助
编辑
这是我所拥有的示例应用程序:https ://github.com/ogdabou/es-stackoverflow-sample
似乎 spring-data-elasticsearch 正在寻找字段“_id”而不是字段“id_str”。也许是因为方法解析(看那里)。我正在寻找一种将我的 json“id_str”属性绑定到我的 idStr java 模型的方法。