Advertisement
Aleksandr37rus

Untitled

Dec 19th, 2022
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 17.52 KB | None | 0 0
  1. @Service
  2. public class SearchProductsMapper {
  3.  
  4.     @Autowired
  5.     private ElasticsearchClient esClient;
  6.  
  7.     @SneakyThrows
  8.     public List<Product> search(SearchProductsDto searchProductsDto) {
  9.         final SearchResponse<Product> response;
  10.         if (searchProductsDto.isRelevance()) {
  11.             if (searchProductsDto.getPriceAsc().equals("price_asc")) {
  12.                 response = esClient.search(s -> s
  13.                                 .index("product")
  14.                                 .from(searchProductsDto.getFrom())
  15.                                 .size(searchProductsDto.getPageSize())
  16.                                 .query(q -> q
  17.                                         .bool(bool -> bool
  18.                                                 .must(must -> must
  19.                                                         .multiMatch(t -> t
  20.                                                                 .fields("productDescription", "vendorArticle", "itemCode")
  21.                                                                 .query(searchProductsDto.getQuery())
  22.                                                         )
  23.                                                 )
  24.                                                 .should(should -> should
  25.                                                         .match(match -> match
  26.                                                                 .field("vendorArticle")
  27.                                                                 .query(searchProductsDto.getQuery())
  28.                                                                 .boost(1.0F)
  29.                                                         )
  30.                                                 )
  31.                                                 .should(should -> should
  32.                                                         .match(match -> match
  33.                                                                 .field("itemCode")
  34.                                                                 .query(searchProductsDto.getQuery())
  35.                                                                 .boost(0.7F)
  36.                                                         )
  37.                                                 )
  38.                                                 .should(should -> should
  39.                                                         .match(match -> match
  40.                                                                 .field("inStock")
  41.                                                                 .query(true)
  42.                                                                 .boost(1.0F)
  43.                                                         )
  44.                                                 )
  45.                                         )
  46.                                 )
  47.                                 .sort(sort -> sort
  48.                                         .field(f -> f
  49.                                                 .order(SortOrder.Asc)
  50.                                                 .field("price.p1")
  51.                                         )
  52.                                 )
  53.                                 .highlight(h -> h
  54.                                         .preTags("[<em><b>]")
  55.                                         .postTags("[</b></em> ]")
  56.                                         .fields("productDescription", f -> f.withJson(new StringReader("{}")))
  57.                                         .fields("vendorArticle", f -> f.withJson(new StringReader("{}")))
  58.                                         .fields("itemCode", f -> f.withJson(new StringReader("{}")))),
  59.                         Product.class);
  60.  
  61.  
  62.                 return getProducts(response);
  63.             }
  64.             if (searchProductsDto.getPriceDesc().equals("price_desc")) {
  65.                 response = esClient.search(s -> s
  66.                                 .index("product")
  67.                                 .from(searchProductsDto.getFrom())
  68.                                 .size(searchProductsDto.getPageSize())
  69.                                 .query(q -> q
  70.                                         .bool(bool -> bool
  71.                                                 .must(must -> must
  72.                                                         .multiMatch(t -> t
  73.                                                                 .fields("productDescription", "vendorArticle", "itemCode")
  74.                                                                 .query(searchProductsDto.getQuery())
  75.                                                         )
  76.                                                 )
  77.                                                 .should(should -> should
  78.                                                         .match(match -> match
  79.                                                                 .field("vendorArticle")
  80.                                                                 .query(searchProductsDto.getQuery())
  81.                                                                 .boost(1.0F)
  82.                                                         )
  83.                                                 )
  84.                                                 .should(should -> should
  85.                                                         .match(match -> match
  86.                                                                 .field("itemCode")
  87.                                                                 .query(searchProductsDto.getQuery())
  88.                                                                 .boost(0.7F)
  89.                                                         )
  90.                                                 )
  91.                                                 .should(should -> should
  92.                                                         .match(match -> match
  93.                                                                 .field("inStock")
  94.                                                                 .query(true)
  95.                                                                 .boost(1.0F)
  96.                                                         )
  97.                                                 )
  98.                                         )
  99.                                 )
  100.                                 .sort(sort -> sort
  101.                                         .field(f -> f
  102.                                                 .order(SortOrder.Desc)
  103.                                                 .field("price.p1")
  104.                                         )
  105.                                 )
  106.                                 .highlight(h -> h
  107.                                         .preTags("[<em><b>]")
  108.                                         .postTags("[</b></em> ]")
  109.                                         .fields("productDescription", f -> f.withJson(new StringReader("{}")))
  110.                                         .fields("vendorArticle", f -> f.withJson(new StringReader("{}")))
  111.                                         .fields("itemCode", f -> f.withJson(new StringReader("{}")))),
  112.                         Product.class);
  113.  
  114.  
  115.                 return getProducts(response);
  116.             }
  117.             if (searchProductsDto.getQuantityAsc().equals("quantity_asc")) {
  118.                 response = esClient.search(s -> s
  119.                                 .index("product")
  120.                                 .from(searchProductsDto.getFrom())
  121.                                 .size(searchProductsDto.getPageSize())
  122.                                 .query(q -> q
  123.                                         .bool(bool -> bool
  124.                                                 .must(must -> must
  125.                                                         .multiMatch(t -> t
  126.                                                                 .fields("productDescription", "vendorArticle", "itemCode")
  127.                                                                 .query(searchProductsDto.getQuery())
  128.                                                         )
  129.                                                 )
  130.                                                 .should(should -> should
  131.                                                         .match(match -> match
  132.                                                                 .field("vendorArticle")
  133.                                                                 .query(searchProductsDto.getQuery())
  134.                                                                 .boost(1.0F)
  135.                                                         )
  136.                                                 )
  137.                                                 .should(should -> should
  138.                                                         .match(match -> match
  139.                                                                 .field("itemCode")
  140.                                                                 .query(searchProductsDto.getQuery())
  141.                                                                 .boost(0.7F)
  142.                                                         )
  143.                                                 )
  144.                                                 .should(should -> should
  145.                                                         .match(match -> match
  146.                                                                 .field("inStock")
  147.                                                                 .query(true)
  148.                                                                 .boost(1.0F)
  149.                                                         )
  150.                                                 )
  151.                                         )
  152.                                 )
  153.                                 .sort(sort -> sort
  154.                                         .field(f -> f
  155.                                                 .order(SortOrder.Asc)
  156.                                                 .field("quantity.tv")
  157.                                         )
  158.                                 )
  159.                                 .highlight(h -> h
  160.                                         .preTags("[<em><b>]")
  161.                                         .postTags("[</b></em> ]")
  162.                                         .fields("productDescription", f -> f.withJson(new StringReader("{}")))
  163.                                         .fields("vendorArticle", f -> f.withJson(new StringReader("{}")))
  164.                                         .fields("itemCode", f -> f.withJson(new StringReader("{}")))),
  165.                         Product.class);
  166.  
  167.  
  168.                 return getProducts(response);
  169.             }
  170.             if (searchProductsDto.getQuantityDesc().equals("quantity_desc")) {
  171.                 response = esClient.search(s -> s
  172.                                 .index("product")
  173.                                 .from(searchProductsDto.getFrom())
  174.                                 .size(searchProductsDto.getPageSize())
  175.                                 .query(q -> q
  176.                                         .bool(bool -> bool
  177.                                                 .must(must -> must
  178.                                                         .multiMatch(t -> t
  179.                                                                 .fields("productDescription", "vendorArticle", "itemCode")
  180.                                                                 .query(searchProductsDto.getQuery())
  181.                                                         )
  182.                                                 )
  183.                                                 .should(should -> should
  184.                                                         .match(match -> match
  185.                                                                 .field("vendorArticle")
  186.                                                                 .query(searchProductsDto.getQuery())
  187.                                                                 .boost(1.0F)
  188.                                                         )
  189.                                                 )
  190.                                                 .should(should -> should
  191.                                                         .match(match -> match
  192.                                                                 .field("itemCode")
  193.                                                                 .query(searchProductsDto.getQuery())
  194.                                                                 .boost(0.7F)
  195.                                                         )
  196.                                                 )
  197.                                                 .should(should -> should
  198.                                                         .match(match -> match
  199.                                                                 .field("inStock")
  200.                                                                 .query(true)
  201.                                                                 .boost(1.0F)
  202.                                                         )
  203.                                                 )
  204.                                         )
  205.                                 )
  206.                                 .sort(sort -> sort
  207.                                         .field(f -> f
  208.                                                 .order(SortOrder.Desc)
  209.                                                 .field("quantity.tv")
  210.                                         )
  211.                                 )
  212.                                 .highlight(h -> h
  213.                                         .preTags("[<em><b>]")
  214.                                         .postTags("[</b></em> ]")
  215.                                         .fields("productDescription", f -> f.withJson(new StringReader("{}")))
  216.                                         .fields("vendorArticle", f -> f.withJson(new StringReader("{}")))
  217.                                         .fields("itemCode", f -> f.withJson(new StringReader("{}")))),
  218.                         Product.class);
  219.  
  220.  
  221.                 return getProducts(response);
  222.             }
  223.         }
  224.         response = esClient.search(s -> s
  225.                         .index("product")
  226.                         .from(searchProductsDto.getFrom())
  227.                         .size(searchProductsDto.getPageSize())
  228.                         .query(q -> q
  229.                                 .bool(bool -> bool
  230.                                         .must(must -> must
  231.                                                 .multiMatch(t -> t
  232.                                                         .fields("productDescription", "vendorArticle", "itemCode")
  233.                                                         .query(searchProductsDto.getQuery())
  234.                                                 )
  235.                                         )
  236.                                         .should(should -> should
  237.                                                 .match(match -> match
  238.                                                         .field("vendorArticle")
  239.                                                         .query(searchProductsDto.getQuery())
  240.                                                         .boost(1.0F)
  241.                                                 )
  242.                                         )
  243.                                         .should(should -> should
  244.                                                 .match(match -> match
  245.                                                         .field("itemCode")
  246.                                                         .query(searchProductsDto.getQuery())
  247.                                                         .boost(0.7F)
  248.                                                 )
  249.                                         )
  250.                                         .should(should -> should
  251.                                                 .match(match -> match
  252.                                                         .field("inStock")
  253.                                                         .query(true)
  254.                                                         .boost(1.0F)
  255.                                                 )
  256.                                         )
  257.                                 )
  258.                         )
  259.                         .highlight(h -> h
  260.                                 .preTags("[<em><b>]")
  261.                                 .postTags("[</b></em> ]")
  262.                                 .fields("productDescription", f -> f.withJson(new StringReader("{}")))
  263.                                 .fields("vendorArticle", f -> f.withJson(new StringReader("{}")))
  264.                                 .fields("itemCode", f -> f.withJson(new StringReader("{}")))),
  265.                 Product.class);
  266.  
  267.  
  268.         return getProducts(response);
  269.     }
  270.  
  271.     private List<Product> getProducts(SearchResponse<Product> response) {
  272.         return response.hits().hits().stream().map(hit -> {
  273.             Product product = hit.source();
  274.             assert product != null;
  275.             if (hit.highlight().get("productDescription") != null) {
  276.                 product.setProductDescription(hit.highlight().get("productDescription").toString()
  277.                         .replaceAll("(\\[|\\])", ""));
  278.             }
  279.             if (hit.highlight().get("vendorArticle") != null) {
  280.                 product.setVendorArticle(hit.highlight().get("vendorArticle").toString()
  281.                         .replaceAll("(\\[|\\])", ""));
  282.             }
  283.             if (hit.highlight().get("itemCode") != null) {
  284.                 product.setItemCode(hit.highlight().get("itemCode").toString()
  285.                         .replaceAll("(\\[|\\])", ""));
  286.             }
  287.             return product;
  288.         }).collect(Collectors.toList());
  289.     }
  290.    
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement