asticsearchrepository сохраняет нулевые значения в полях - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь сделать простой проект с пружинной загрузкой + пружинные данные +asticsearch.Сейчас я пытаюсь сохранить документ вручную вasticsearch, однако метод «save» создает только пустой документ с пустыми полями и только идентификатором.Что мне здесь не хватает?

Я использую версию Flexiblesearch 2.4.6 и версию Spring-boot-starter-parent 1.5.9

, здесь есть конфигурацияasticsearch

@Configuration
@EnableElasticsearchRepositories(basePackages = "com.hellokoding.springboot.Article.repository")
public class EsConfig {

@Value("${elasticsearch.host}")
private String EsHost;

@Value("${elasticsearch.port}")
private int EsPort;

@Value("${elasticsearch.clustername}")
private String EsClusterName;

@Bean
public Client client() throws Exception {

    Settings esSettings = Settings.settingsBuilder()
            .put("cluster.name", EsClusterName)
            .build();

    //https://www.elastic.co/guide/en/elasticsearch/guide/current/_transport_client_versus_node_client.html
    return TransportClient.builder()
            .settings(esSettings)
            .build()
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(EsHost), EsPort));
}

@Bean
public ElasticsearchOperations elasticsearchTemplate() throws Exception {
    return new ElasticsearchTemplate(client());
}
}

класс документа, я пытался использовать @Field, но ничего не изменилось, я пытался сделать свое отображение индекса максимально простым, но опять же, ничего: (

@Document(indexName = "library", type = "articles")
public class Article {

@Id
private String id;

//@Field(type = FieldType.String)
private String title;

//@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
private String author;

//@Field(type = FieldType.Integer, index = FieldIndex.not_analyzed)
private int year;

//@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
private String isbn;

//@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
private String publisher;

//@Field(type = FieldType.String)
private String pub_type;

//@Field(type = FieldType.String)
private String abstrct;

//@Field(type = FieldType.String)
private String tags;

public Article() {
}

public Article(String title, String author, int year, String isbn, String publisher, String pub_type, String articleAbstract, String tags) {
    this.title = title;
    this.author = author;
    this.year = year;
    this.isbn = isbn;
    this.publisher = publisher;
    this.pub_type = pub_type;
    this.abstrct = articleAbstract;
    this.tags = tags;
}

интерфейс репозитория эластичного поиска

@Repository
public interface ArticleRepository extends ElasticsearchRepository<Article, String> {

Page<Article> findByAuthor(String author, Pageable pageable);

List<Article> findByTitle(String title);

}

класс обслуживания

@Service
public class ArticleServiceImpl implements ArticleService {

@Autowired
private ArticleRepository articleRepository;


public void setBookRepository(ArticleRepository articleRepository) {
    this.articleRepository = articleRepository;
}

public Article save(Article article) {
    return articleRepository.save(article);
} 
}

класс приложения

@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer 
{
   @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(WebApplication.class);
}

public static void main(String[] args) throws Exception {
    SpringApplication.run(WebApplication.class, args);
}
}

Я попытался добавить конфигурацию @EnableElasticsearchRepositories, но ничего не изменилось

и, наконец, здесьэто контроллер, в котором я сохраняю документ, я знаю, что это не кажется практичным, но теперь я просто хочу сохранить документ, а затем выполнить jsps и т. д.

@Controller
public class HelloController {

@Autowired
private ArticleServiceImpl articleServiceImpl;

@RequestMapping("/insert")
public String insert() {

    String title = "a title";

    String author = "sheldon cooper";

    String isbn = "an isbn";

    String publisher = "that publisher";

    String pub_type = "book";

    String articleAbstract = "this is an abstract";

    String tags = "big bang theory";

    Article article = new Article(title, author, 2020, isbn, publisher, pub_type, articleAbstract, tags);
    articleServiceImpl.save(article);

    return "hello";
}
}

, поэтому, когда я пытаюсь сохранитьпри этом не возникает ошибок, и новый документ добавляется вasticsearch, однако это то, что индексируется при запуске match_all

{
"_index": "library",
"_type": "articles",
"_id": "AWYCh2clu71V92oy9KTB",
"_score": 1,
"_source":{
}
}

, почему ни одно из значений поля не сохраняется? заранее спасибо:)

1 Ответ

0 голосов
/ 22 сентября 2018

добавьте методы получения и установки в ваш класс сущностей или аннотируйте поля с помощью аннотации Jackson @JsonProperty

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...