<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Product Search using Linked Data</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>John Walker</string-name>
          <email>john.walker@semaku.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Herman Elenbaas</string-name>
          <email>herman.elenbaas@nexperia.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Nexperia</institution>
          ,
          <addr-line>Jonkerbosplein 52, 6534 AB Nijmegen</addr-line>
          ,
          <country country="NL">Netherlands</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Semaku</institution>
          ,
          <addr-line>Torenallee 20, 5617 BC Eindhoven</addr-line>
          ,
          <country country="NL">Netherlands</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Nexperia is a semiconductor manufacturer with a rich heritage from Philips and NXP. With such a long history, the company has built an impressive product portfolio of over ten thousand distinct product models. With this many products, finding the relevant data across the various systems can be an onerous task. To that end Nexperia have adopted and extended the award-winning Enterprise Data Hub [1] solution originally developed in cooperation with NXP and publish Linked Data on the Nexperia Data Portal [2]. One of the key new developments has been the Product Search application which enables users to quickly find answers to the most frequently asked questions from customers in a fast, responsive and intuitive interface. Typically, this might be a Nexperia sales representative talking to a customer who needs information about what products to purchase. Being able to provide fast and accurate product information can help Nexperia to win more sales. To ensure a fast search experience, we use an Elasticsearch cluster for the search index. In this paper we explain the Extract, Transform, Load (ETL) approach used to populate the search index and how Linked Data adds value in the Product Search application.</p>
      </abstract>
      <kwd-group>
        <kwd>RDF</kwd>
        <kwd>SPARQL</kwd>
        <kwd>JSON-LD</kwd>
        <kwd>ETL</kwd>
        <kwd>search</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>increased, we saw a degradation in performance and maintainability of the queries. To
remedy this, we decided to split the monolithic queries into several smaller
CONSTRUCT queries where the results of the queries can be combined using an RDF
merge operation to concatenate the graphs.</p>
      <p>Not only is the performance of these smaller queries much more predictable, it also
reduces the workload that the SPARQL endpoint must perform on a single request and
therefore reduces the stress on the server. The queries are also significantly easier to
understand for the developers and therefore easier to develop, debug and maintain.
Additional benefits of doing this is it is now possible to test and measure performance of
the individual queries to identify bottlenecks and take actions to improve performance.
This also allowed us to change the ETL approach, which was previously an incremental
approach product-by-product, to also enable a full reload of the search index in a
performant manner.</p>
      <p>The merge of the results from the queries is done in a Jena in-memory model. We
then extract an unbounded sub-model from this per product resource. The sub-model is
then framed using JSON-LD Framing to coerce the graph into a hierarchical idiomatic
JSON structure and to alias URIs to developer-friendly ‘local’ names. These framed
documents are then added to the Elasticsearch index. On a full reload of the index, we
create a new index alongside the current index and swap these once the new index is
populated. This gives zero downtime for users. The process for a full refresh takes under
5 minutes to complete.
2</p>
      <p>Product Search application
The Product Search application was developed in close cooperation with business
users. We followed a user-oriented approach with a design sprint to make sure we truly
understand the user needs and requirements, resulting in a validated design. This was
followed by several implementation sprints to bring the design to a working application.</p>
      <p>The application consists of Java Spring Boot server-side and Vue.js client-side
running in the web browser. The server mediates requests to the backend services by
exposing an API consumed by the client. The backend services include calls to the
Elasticsearch index, SPARQL queries and a third-party API for external stock and pricing
data.</p>
      <p>The application leverages the linked nature of the data by displaying links to other
resources and by using the property URIs to lookup the labels and definitions of those
properties for display in the application.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Enterprise</given-names>
            <surname>Linked Data</surname>
          </string-name>
          award
          <year>2015</year>
          , https://2015.semantics.cc/eldc-awards-given,
          <source>last accessed</source>
          <year>2018</year>
          /06/04
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>Nexperia</given-names>
            <surname>Data</surname>
          </string-name>
          <string-name>
            <surname>Portal</surname>
          </string-name>
          , http://www.data.nexperia.com/
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>