Elasticsearch 返回空的 json 对象
Posted
技术标签:
【中文标题】Elasticsearch 返回空的 json 对象【英文标题】:Elasticsearch returns empty json-objects 【发布时间】:2020-03-14 02:55:31 【问题描述】:我刚刚开始使用带有 spring 的 elasticsearch,这两种技术对我来说都是全新的。我已经使用 logstash 将数据上传到 elasticseach 索引,并且可以使用 kebana 成功搜索它。但是,当我尝试使用 spring 从索引返回到网页时,它只返回空的 json 对象,但会返回适量的空对象。是我错误地上传了数据还是我的代码有问题?我不明白为什么会发生这种情况,我希望能得到任何帮助。您可以在下面找到一些代码。
类型代码:
@Document(indexName="usmgbg_index", type="usmgbg_type")
public class Usmgbg
@Id
private String ID;
private String Source, Name, Profession, Country, FileName, LastModified, OwnerID;
存储库:
@Repository
public interface UsmgbgRepository extends ElasticsearchRepository<Usmgbg, String>
控制器:
@RestController
public class UsmgbgController
@Autowired
private UsmgbgRepository repository;
@GetMapping("usmgbg/findall")
public List<Usmgbg> findAllCustomers()
List<Usmgbg> items = new ArrayList<>();
repository.findAll().forEach(items::add);
return items;
我从 findAllCustomers 得到的输出如下:
[,,,,....]
【问题讨论】:
也许你的 _source 是假的? 这是配置文件的选项吗,因为我没有使用任何名为_source的字段,_source的默认选项是否为false? ***.com/questions/57308752/… 【参考方案1】:我意识到这是一个老问题,但我遇到了同样的问题(可能出于不同的原因),我通过在模型中添加 getter 和 setter 解决了这个问题。
【讨论】:
【参考方案2】:Iterable 从 findAll() 返回。
如果要获取列表,则应先获取内容。
改变
@Repository
public interface UsmgbgRepository extends
ElasticsearchRepository<Usmgbg, String>
Page<Usmgbg> findAll();
然后
repository.findAll().getContent().forEach(items::add);
或者修复您的代码以迭代结果。
另一种解决方案是使用 QueryBuilders API 在 ElasticsearchRepository 中使用 search 方法。
Iterable<Usmgbg>=
repository.search(QueryBuilders.matchAllQuery);
【讨论】:
我试过这个,结果是一样的。我想我也可以提到如果我打印返回列表,它看起来像这样:[com.example.demo.usmgbg.Usmgbg@5025389, com.example.demo.usmgbg.Usmgbg@13dc7f1.....] 谢谢! 我已经尝试了你的两种方法,但它们给出了相同的结果?你还有什么想法吗? 不行,我换客户端的时候没有其他结果,明天还要多看!但是感谢您的帮助! 你可以随时切换到Java High Level Rest Client medium.com/@sourav.pati09/…【参考方案3】:添加我的经验
spring-data
要求 getter 遵循 POJO 命名,即:getSomething()
所以它不起作用(当保存@Document
时,spring-data没有向ElasticSearch发送任何字段,导致ES中的_source
为空)当有Lombok @Accessors(fluent = true)
,因为它删除了 getter 上的 get
前缀 ...
【讨论】:
以上是关于Elasticsearch 返回空的 json 对象的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch 使用 Golang Beats 返回原始 JSON
Branch.io initSession 返回空的引用参数 json