Scroll Top
Solr Payload Inequalities


New in Solr/Lucene 9.x is the ability to do inequality operations to search against payloads on terms.  Inequalities provide the ability to search for values that are greater than, less than, or equal to some threshold. 

As search and AI continue to  converge, one common use case is to be able to search for documents that have been classified by a machine learned model.  These models typically output a label and confidence score for each classification.  Documents can have many classifications associated with them that are generated from many different machine learned models.  

The result is a data model where you have a document and a list of associated classifications.  Let’s explore three different approaches to indexing and querying these documents and classifications along with a fourth approach using our recent contribution back to the Lucene and Solr Apache projects: the inequality payload query operator.

We’ll start with  a data model like the following which shows a relationship between a document and the document’s associated classifications.

As each document is associated with zero or more classifications, each with their own label and confidence score, we are presented with the challenge to answer queries with the index to find something like the following:

“Show me all of the images that have a high confidence that they are of a person.”

For this example query, we’ll take an example index that was created by running the COCO2017 image dataset through the Yolo and the VGG16 image classification neural networks.  The output classifications by either model represent the objects that were detected in the image.

The VGG16 image provides classification of 1000 object types and their confidence levels.  The Yolo model provides us with 80 classes of objects that have been found with their confidence and additionally bounding box coordinates of where the image was found.

Approach 1: Do it at index time

One common approach to answer this problem is to only tag the documents as being a “person” if the classification was above a particular threshold.  Having a single field on the document for the “high confidence” classifications is a perfectly valid approach.  The queries remain very simple, as they are just querying for a particular label in the classification field of the document.



However, this will prevent the user from searching for documents with medium confidence labels.  To address this query, the indexing of the documents could stamp two fields, one with “high confidence” labels and another with “medium confidence” labels.  

Then you can search the “medium confidence” field or the “high confidence” field for the label in question.  The trade off here is that at query time  a search across multiple fields is required. As requirements for the  confidence filter become more granular, additional bucketed fields need to be created.  If the definition of those confidence levels changes the documents would need to be re-indexed to recompute the proper labels for the proper bucket.  This approach works only if the definition of high confidence label is known up front and will never change.


high_confidence:person OR medium_confidence:person

In reality, users want the ultimate flexibility to decide what they consider a high confidence classification.  User interfaces might even want to present this as a slider control in a search UI.

Approach 2 Do it at query time with a field for the labels

To avoid having to re-index all the documents when the definition of high confidence changes, there are  a few viable options at query time  to solve this problem.  

One approach is to store the confidence score for each label generated by the models in separate fields on the document, one field per label. 

Once the documents are indexed with a field for each label’s score, a range search can be executed on the field that corresponds to the label that is being searched.   In the above example query, searching for documents that have a “person” with high confidence could be implemented as a range search on the “person” field.

For example:  

person:[0.75 TO *]

This approach has its drawbacks as well in that you might have multiple persons detected in an image, each with their own confidence level.  So at best, you could choose the highest confidence level of the person classification and use that for search purposes or potentially use a multi-valued field to represent each score.

An additional drawback is that each possible label requires an additional field in the index.  This approach could use dynamic fields unless all of the possible labels are be known up front.  Some models might classify thousands of different object types.  This would result in  an explosion in the number of fields in the index.  Aside from the potential for the number of fields to become unruly, the UI and query language would also need to know how to map the label to the appropriate field name to properly construct that query.

Approach 3:  Use joins to perform the filtering

The next possible approach is to index each classification as a child document and do parent/child join queries against Solr.  There is a join query parser in Solr that allows for all sorts of database-like join queries between two queries.  These queries allow for relational queries between two different datasets.  As wonderful as that sounds, (and it is wonderful!) there are some limitations and drawbacks to this approach.  The first and most notable is that if you have a multi-shard index, special attention needs to be paid to how the documents are routed to the shards of the index.  The key constraint for the parent/child document queries is that the documents need to be routed to the shards based on the value of their join key.

In this approach a document is indexed to represent each classification that is generated for the document being classified.  Every document in the index will have zero or more classification documents that relate to it.  For some applications it’s ok to change how the routing is working, but depending on the query use cases, this might not be possible.  

The second notable drawback to the join query approach is that it is comparatively slow and very expensive to execute as compared to other simpler term and range queries.

Lastly, the join query potentially introduces a large number of additional documents to the index.  This will impact the overall search latency for any given query.  Query latency is proportional to the number of documents per shard in an index.  So, the introduction of all the classification documents will affect the cluster sizing, as now the index should be sized to support the additional documents.  That typically means more shards and potentially servers with additional CPUs.

The basic approach is to search on classifications but return the parent document. 

Search all documents that have a child document that contains a label of “foo” with a confidence greater than 0.75.

For example:

{!join to=”id” from=”parent_id” v=”+label:foo +confidence:[0.75 TO *]”}  

Approach 4:  New & improved inequality payload support!

Upon review, it seemed that an alternative approach to use payloads might be able to solve this problem.  The payload_check query parser in Solr provides access to the SpanPayloadCheckQuery.  This Lucene query provides access to the payload data while matching.  Once the term has been matched, the payload is then checked to see if it’s actually a match.  This functionality was used to support things like part of speech tagging for terms.  It allowed developers to use a delimited payload field in the Solr schema.  The values in that field could then be encoded with the term and a value delimited by a pipe.

An example of Part of Speech tagged text using the delimited payload:

Lucene|NOUN is|VERB awesome|ADJ

In addition to the payloads being strings, an integer or a floating point number can be stored there and encoded like:

Person|0.82 Cat|0.75 Monitor|0.55

The only missing piece to being able to use this for the AI model classification search was the ability to do a range search on the payload instead of just an equals operation.

We had the pleasure of recently contributing this capability back to Lucene and Solr.  The patch includes the ability to provide an operation while matching now to support common operations such as greater than, less than, in addition to the equals operator.  We’re happy to see that it will be included in the upcoming Solr 9.0 release.  

So, now we can express the desired query as:

{!payload_check f=”classifications_dpfs” op=”gt” payloads=”0.75″ v=”Person”}

The new payload check query parser allows the user to specify the operation and the payload value to use as the reference for that operation.  The above example searches the “classifications_dpfs” field for any classification of “Person” where the payload has a value greater than 0.75.  

So, with this last option we can use the payload check query parser in Solr to allow us to search for labels from the classification model that are above a threshold confidence score.  

The ultimate result here is that we get the full ability to search on a term with one additional dimension of metadata filtering.  Term and Payload.  This unlocks a lot of other possibilities when it comes to image search.

One possible example is to put the number of people found as a payload.  Yolo can detect multiple objects in a scene, so the user could search for something like:

“At least 2 people and a tennis racket.”

Having the classifier output from Yolo in the following format:

Person|2 Tennis_Racket|1 

A similar approach can be taken if you want to encode the center point X and Y coordinates. This would enable searches like: 

“Find me a picture with a Person on the left and a Pizza on the right.”

The capabilities increase further when you start putting together scene labels along with object classification, like:  

Yolo + VGG16 to get context in the search results.

By combining these two computer vision models we can start asking questions beyond what Yolo alone can answer.   

“Show me a picture of at least 2 people skiing” 

Yolo will detect the number of people and the VGG16 model detects the act of skiing.


First, some notes about how the benchmarks were generated:

Each of the 4 approaches has the same configset.  All cache sizes (except for the perSegment cache) were set to zero size. All indices in the test were a single shard with one segment and no deleted documents.  All of the indices represent 1,000,000 documents.  Each document has an average of 50 classifications associated with it.  Each classification has a random confidence score from 0 to 1.  

Approach 1 Document Example: A multi-valued field that contains only the labels that had a confidence score greater than 0.75.

  "classification_ss":  ["label_7792","label_9689","label_2049","label_6581",

Approach 2 Document Example: A document with a field for each label containing the value of the confidence score for that label.


Approach 3 Example Document:  One document that represents the record being classified and an additional document for every classification associated with that document.  The total number of documents in this index was 1,000,000 for the parent documents and 50,485,334 documents for each of the classification records.

# Example Parent Document


# Example Classification Document (on average 50 of these for each parent document.)


Approach 4 Example Document: A document with a single field containing all classification labels with the confidence level encoded as a payload.


Benchmark Results

Index Comparison 

Metric Approach 1 Approach 2 Approach 3 Approach 4 Comments
DPS 11761 209 409 3566 Documents indexed on a single thread generating random data.  Updates batched, no committing while feeding content.  Only a single replica active.
Index Size 219.32 906.99 2610 1220 Size in MB
Memory 1772 1361108 5556 1460 As reported from solr admin gui
Test Query classification_ss:label_7792 label_7792_fs:[0.75 TO *] {!join from=”parent_id_s” to=”id” v=”+label_s:label_7792 +confidence_f:[0.75 TO *]”} {!payload_check op=”gt” f=”class_dpfs” payloads=”0.75″}label_7792 Example syntax

Indexing Benchmark Commentary

There are some interesting takeaways from this benchmark.  

Indexing Performance

  • As expected, with Approach 1, the documents were faster to index as some data is being discarded. Pre-filtering the data yields smaller documents, and as a result they are faster to index.  It was slightly surprising to see the negative impact of having many fields on a document.  
  • Approach 2 documents were much larger overall compared to the rest of the approaches and as a result, this approach was the slowest to index overall. 
  • Approach 3 with the children documents was about 2x faster than approach 2 for indexing.
  • Approach 4 with the payload was about 16 times faster Approach 2 to index.  The payload approach definitely has a major indexing performance advantage over the other approaches.

Index Size

  • Approach 1 yielded the smallest index as data was being thrown away and the data model is the simplest.
  • Approach 2 was the most efficient in terms of index side between 2,3 and 4.  This lends some of the performance issues to this approach to simply be attributed to the json formatting. 
  • Approach 3 using children documents had the largest index size over all, showing the impact of the additional children documents in the index.  
  • Approach 4 was only about 33% larger than the field based Approach 2 and less than ½ the size of Approach 3.  The key item to note here is the additional .pay files in the index to store the payload data.

Memory Usage

  • Approach 4 had the lowest memory overhead for having the index open.  This was a very surprising result.  
  • Approach 2 yielded the largest surprise.  The index heap usage was nearly 1000x that of the other approaches.  This really highlights the overhead of having 10,000 fields in the index.  This is relatively dramatic and shouldn’t be ignored.  

Query Performance Comparison

Metrix Approach 1 Approach 2 Approach 3 Approach 4 Comments
Number of queries 10000 10000 100* 10000 Join queries were so slow, the test was stopped after 100 queries
average 1 2 1803 3 In milliseconds
min 1 1 1656 2 ms
max 6 22 2092 47 ms
std dev 0.55 0.79 88.28 1.55  
throughput 636 347.9 0.556666667 254 Queries per second (single threaded execution)
sent kb/sec 109 60.09 0.15 61.5  
received kb/sec 6124 8988.84 0.82 948.88  
avg bytes 9861 26461.3 1499 3826.1 Average response size in bytes

Query Benchmark Commentary

From a pure performance perspective, again, no surprise that Approach 1 is the fastest.  The join query approach (Approach 3) really shows how its performance is orders of magnitude slower than simple term and range queries in Solr.  The second best query performance was the field for each label (Approach 2).  This really highlights how efficient Solr/Lucene is at performing range query operations.  It also shows that it’s not much of a cost to use payloads compared to the expensive join operations.

One other thing to note about the payload approach (Approach 4) is that for this dataset, the json encoding of the document with the payloads is even tighter than Approach 1.  

Next Steps 

There are always things that can be improved and built upon.  As a result of implementing this feature, it was noticed that the payload encoding and decoding code is a bit fragmented.  It would be nice to centralize and consolidate some of that logic with the hope of making payloads more extensible.  

There are some other novel queries that can be performed with the new payload support. For example, if using the classifications as a feature vector, a query can be created to find other documents that were classified in a similar manner to implement a “find similar” for image data. 

Going beyond this, one could envision extending the payload supported data types to include a vector of floating point values to enable vector based matching calculations such as cosine, manhattan, or euclidean distance metrics for similarity.

The ultimate realization of the power of this functionality will ultimately be through NLU techniques to translate free text queries into the appropriate payload check queries.  More to come on that.


The biggest take away here is that as you require more granular query capabilities, the expense of the query goes up.  If an application truly needs to do a full relational style join query, then special attention needs to be paid to how that system is scaled.  Additionally, we can also see that payloads become a very attractive design pattern due to the indexing performance, memory usage characteristics, query performance, and ultimately query granularity make it a viable approach for applications to avoid needing to scale up for using a join query.

Comments (1)

[…] 30, 2022 Search Engine Upgrade By Kevin Watters July 2, 2022 Solr Payload Inequalities By Kevin Watters June 12, 2021 The Cross Collection Join Query By Dan Fox […]

Leave a comment

Privacy Policy

Last updated: January 17, 2023

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.

We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy.



The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.


For the purposes of this Privacy Policy:

  • Account means a unique account created for You to access our Service or parts of our Service.
  • Business, for the purpose of the CCPA (California Consumer Privacy Act), refers to the Company as the legal entity that collects Consumers’ personal information and determines the purposes and means of the processing of Consumers’ personal information, or on behalf of which such information is collected and that alone, or jointly with others, determines the purposes and means of the processing of consumers’ personal information, that does business in the State of California.
  • Company (referred to as either “the Company”, “We”, “Us” or “Our” in this Agreement) refers to KMW Technology LLC, 29 Pemberton Rd Wayland MA 01778.
    For the purpose of the GDPR, the Company is the Data Controller.
  • Consumer, for the purpose of the CCPA (California Consumer Privacy Act), means a natural person who is a California resident. A resident, as defined in the law, includes (1) every individual who is in the USA for other than a temporary or transitory purpose, and (2) every individual who is domiciled in the USA who is outside the USA for a temporary or transitory purpose.
  • Cookies are small files that are placed on Your computer, mobile device or any other device by a website, containing the details of Your browsing history on that website among its many uses.
  • Country refers to: Massachusetts, United States
  • Data Controller, for the purposes of the GDPR (General Data Protection Regulation), refers to the Company as the legal person which alone or jointly with others determines the purposes and means of the processing of Personal Data.
  • Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.
  • Do Not Track (DNT) is a concept that has been promoted by US regulatory authorities, in particular the U.S. Federal Trade Commission (FTC), for the Internet industry to develop and implement a mechanism for allowing internet users to control the tracking of their online activities across websites.
  • Personal Data is any information that relates to an identified or identifiable individual.
    For the purposes of GDPR, Personal Data means any information relating to You such as a name, an identification number, location data, online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity.
    For the purposes of the CCPA, Personal Data means any information that identifies, relates to, describes or is capable of being associated with, or could reasonably be linked, directly or indirectly, with You.
  • Sale, for the purpose of the CCPA (California Consumer Privacy Act), means selling, renting, releasing, disclosing, disseminating, making available, transferring, or otherwise communicating orally, in writing, or by electronic or other means, a Consumer’s personal information to another business or a third party for monetary or other valuable consideration.
  • Service refers to the Website.
  • Service Provider means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used. For the purpose of the GDPR, Service Providers are considered Data Processors.
  • Usage Data refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).
  • Website refers to KMW Technology, accessible from
  • You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.
    Under GDPR (General Data Protection Regulation), You can be referred to as the Data Subject or as the User as you are the individual using the Service.




While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:

  • Email address
  • First name and last name
  • Phone number
  • Address, State, Province, ZIP/Postal code, City
  • Usage Data


Usage Data is collected automatically when using the Service.

Usage Data may include information such as Your Device’s Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.

We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.


We use Cookies and similar tracking technologies to track the activity on Our Service and store certain information. Tracking technologies used are beacons, tags, and scripts to collect and track information and to improve and analyze Our Service. The technologies We use may include:

  • Cookies or Browser Cookies. A cookie is a small file placed on Your Device. You can instruct Your browser to refuse all Cookies or to indicate when a Cookie is being sent. However, if You do not accept Cookies, You may not be able to use some parts of our Service. Unless you have adjusted Your browser setting so that it will refuse Cookies, our Service may use Cookies.
  • Web Beacons. Certain sections of our Service and our emails may contain small electronic files known as web beacons (also referred to as clear gifs, pixel tags, and single-pixel gifs) that permit the Company, for example, to count users who have visited those pages or opened an email and for other related website statistics (for example, recording the popularity of a certain section and verifying system and server integrity).

Cookies can be “Persistent” or “Session” Cookies. Persistent Cookies remain on Your personal computer or mobile device when You go offline, while Session Cookies are deleted as soon as You close Your web browser. Learn more about cookies on the Privacy Policies website article.

We use both Session and Persistent Cookies for the purposes set out below:

  • Necessary / Essential Cookies
    Type: Session Cookies
    Administered by: Us
    Purpose: These Cookies are essential to provide You with services available through the Website and to enable You to use some of its features. They help to authenticate users and prevent fraudulent use of user accounts. Without these Cookies, the services that You have asked for cannot be provided, and We only use these Cookies to provide You with those services.
  • Cookies Policy / Notice Acceptance Cookies
    Type: Persistent Cookies
    Administered by: Us
    Purpose: These Cookies identify if users have accepted the use of cookies on the Website.
  • Functionality Cookies
    Type: Persistent Cookies
    Administered by: Us
    Purpose: These Cookies allow us to remember choices You make when You use the Website, such as remembering your login details or language preference. The purpose of these Cookies is to provide You with a more personal experience and to avoid You having to re-enter your preferences every time You use the Website.
  • Tracking and Performance Cookies
    Type: Persistent Cookies
    Administered by: Third-Parties
    Purpose: These Cookies are used to track information about traffic to the Website and how users use the Website. The information gathered via these Cookies may directly or indirectly identify you as an individual visitor. This is because the information collected is typically linked to a pseudonymous identifier associated with the device you use to access the Website. We may also use these Cookies to test new pages, features or new functionality of the Website to see how our users react to them.

For more information about the cookies we use and your choices regarding cookies, please visit our Cookies Policy or the Cookies section of our Privacy Policy.


Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.

These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.


For uniform representation of fonts, this page uses web fonts provided by Google. When You open a page, your browser loads the required web fonts into your browser cache to display texts and fonts correctly.

For this purpose your browser has to establish a direct connection to Google servers. Google thus becomes aware that our web page was accessed via your IP address. The use of Google Web fonts is done in the interest of a uniform and attractive presentation of our plugin. This constitutes a justified interest pursuant to Art. 6 (1) (f) DSGVO.

If your browser does not support web fonts, a standard font is used by your computer.

Further information about handling user data, can be found at Frequently Asked Questions  |  Google Fonts  |  Google Developers and in Google’s privacy policy at Privacy Policy – Privacy & Terms – Google.


Our website uses plugins from YouTube, which is operated by Google. The operator of the pages is YouTube LLC, 901 Cherry Ave., San Bruno, CA 94066, USA.

If You visit one of our pages featuring a YouTube plugin, a connection to the YouTube servers is established. Here the YouTube server is informed about which of our pages you have visited.

If you’re logged in to your YouTube account, YouTube allows you to associate your browsing behavior directly with your personal profile. You can prevent this by logging out of your YouTube account.

YouTube is used to help make our website appealing. This constitutes a justified interest pursuant to Art. 6 (1) (f) DSGVO.

Further information about handling user data, can be found in the data protection declaration of YouTube under Understanding the basics of privacy on YouTube apps.


Akistmet’s anti-spam service collects information about visitors who comment on our site. The information collected but typically includes the commenter’s IP address, user agent, referrer, and Site URL (along with other information directly provided by the commenter such as their name, username, email address, and the comment itself).


The Company may use Personal Data for the following purposes:

  • To provide and maintain our Service, including to monitor the usage of our Service.
  • To manage Your Account: to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.
  • For the performance of a contract: the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service.
  • To contact You: To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application’s push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation.
  • To provide You with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information.
  • To manage Your requests: To attend and manage Your requests to Us.
  • For business transfers: We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred.
  • For other purposes: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience.

We may share Your personal information in the following situations:

  • With Service Providers: We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You.
  • For business transfers: We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company.
  • With Affiliates: We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us.
  • With business partners: We may share Your information with Our business partners to offer You certain products, services or promotions.
  • With other users: when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside.
  • With Your consent: We may disclose Your personal information for any other purpose with Your consent.


The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.


Your information, including Personal Data, is processed at the Company’s operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.

Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.

The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.


You have the right to delete or request that We assist in deleting the Personal Data that We have collected about You.

Our Service may give You the ability to delete certain information about You from within the Service.

You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and visiting the account settings section that allows you to manage Your personal information. You may also contact Us to request access to, correct, or delete any personal information that You have provided to Us.

Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis to do so.



If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.


Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).


The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:

  • Comply with a legal obligation
  • Protect and defend the rights or property of the Company
  • Prevent or investigate possible wrongdoing in connection with the Service
  • Protect the personal safety of Users of the Service or the public
  • Protect against legal liability


The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.


The Service Providers We use may have access to Your Personal Data. These third-party vendors collect, store, use, process and transfer information about Your activity on Our Service in accordance with their Privacy Policies.


We may use third-party Service providers to monitor and analyze the use of our Service.

  • Google Analytics
    Google Analytics is a web analytics service offered by Google that tracks and reports website traffic. Google uses the data collected to track and monitor the use of our Service. This data is shared with other Google services. Google may use the collected data to contextualize and personalize the ads of its own advertising network.
    You can opt-out of having made your activity on the Service available to Google Analytics by installing the Google Analytics opt-out browser add-on. The add-on prevents the Google Analytics JavaScript (ga.js, analytics.js and dc.js) from sharing information with Google Analytics about visits activity.
    For more information on the privacy practices of Google, please visit the Google Privacy & Terms web page:



We may process Personal Data under the following conditions:

  • Consent: You have given Your consent for processing Personal Data for one or more specific purposes.
  • Performance of a contract: Provision of Personal Data is necessary for the performance of an agreement with You and/or for any pre-contractual obligations thereof.
  • Legal obligations: Processing Personal Data is necessary for compliance with a legal obligation to which the Company is subject.
  • Vital interests: Processing Personal Data is necessary in order to protect Your vital interests or of another natural person.
  • Public interests: Processing Personal Data is related to a task that is carried out in the public interest or in the exercise of official authority vested in the Company.
  • Legitimate interests: Processing Personal Data is necessary for the purposes of the legitimate interests pursued by the Company.

In any case, the Company will gladly help to clarify the specific legal basis that applies to the processing, and in particular whether the provision of Personal Data is a statutory or contractual requirement, or a requirement necessary to enter into a contract.


The Company undertakes to respect the confidentiality of Your Personal Data and to guarantee You can exercise Your rights.

You have the right under this Privacy Policy, and by law if You are within the EU, to:

  • Request access to Your Personal Data. The right to access, update or delete the information We have on You. Whenever made possible, you can access, update or request deletion of Your Personal Data directly within Your account settings section. If you are unable to perform these actions yourself, please contact Us to assist You. This also enables You to receive a copy of the Personal Data We hold about You.
  • Request correction of the Personal Data that We hold about You. You have the right to have any incomplete or inaccurate information We hold about You corrected.
  • Object to processing of Your Personal Data. This right exists where We are relying on a legitimate interest as the legal basis for Our processing and there is something about Your particular situation, which makes You want to object to our processing of Your Personal Data on this ground. You also have the right to object where We are processing Your Personal Data for direct marketing purposes.
  • Request erasure of Your Personal Data. You have the right to ask Us to delete or remove Personal Data when there is no good reason for Us to continue processing it.
  • Request the transfer of Your Personal Data. We will provide to You, or to a third-party You have chosen, Your Personal Data in a structured, commonly used, machine-readable format. Please note that this right only applies to automated information which You initially provided consent for Us to use or where We used the information to perform a contract with You.
  • Withdraw Your consent. You have the right to withdraw Your consent on using your Personal Data. If You withdraw Your consent, We may not be able to provide You with access to certain specific functionalities of the Service.


You may exercise Your rights of access, rectification, cancellation and opposition by contacting Us. Please note that we may ask You to verify Your identity before responding to such requests. If You make a request, We will try our best to respond to You as soon as possible.

You have the right to complain to a Data Protection Authority about Our collection and use of Your Personal Data. For more information, if You are in the European Economic Area (EEA), please contact Your local data protection authority in the EEA.


This privacy notice section for California residents supplements the information contained in Our Privacy Policy and it applies solely to all visitors, users, and others who reside in the State of California.


We collect information that identifies, relates to, describes, references, is capable of being associated with, or could reasonably be linked, directly or indirectly, with a particular Consumer or Device. The following is a list of categories of personal information which we may collect or may have been collected from California residents within the last twelve (12) months.

Please note that the categories and examples provided in the list below are those defined in the CCPA. This does not mean that all examples of that category of personal information were in fact collected by Us, but reflects our good faith belief to the best of our knowledge that some of that information from the applicable category may be and may have been collected. For example, certain categories of personal information would only be collected if You provided such personal information directly to Us.

  • Category A: Identifiers.
    Examples: A real name, alias, postal address, unique personal identifier, online identifier, Internet Protocol address, email address, account name, driver’s license number, passport number, or other similar identifiers.
    Collected: Yes.
  • Category B: Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e)).
    Examples: A name, signature, Social Security number, physical characteristics or description, address, telephone number, passport number, driver’s license or state identification card number, insurance policy number, education, employment, employment history, bank account number, credit card number, debit card number, or any other financial information, medical information, or health insurance information. Some personal information included in this category may overlap with other categories.
    Collected: Yes.
  • Category C: Protected classification characteristics under California or federal law.
    Examples: Age (40 years or older), race, color, ancestry, national origin, citizenship, religion or creed, marital status, medical condition, physical or mental disability, sex (including gender, gender identity, gender expression, pregnancy or childbirth and related medical conditions), sexual orientation, veteran or military status, genetic information (including familial genetic information).
    Collected: No.
  • Category D: Commercial information.
    Examples: Records and history of products or services purchased or considered.
    Collected: No.
  • Category E: Biometric information.
    Examples: Genetic, physiological, behavioral, and biological characteristics, or activity patterns used to extract a template or other identifier or identifying information, such as, fingerprints, faceprints, and voiceprints, iris or retina scans, keystroke, gait, or other physical patterns, and sleep, health, or exercise data.
    Collected: No.
  • Category F: Internet or other similar network activity.
    Examples: Interaction with our Service or advertisement.
    Collected: Yes.
  • Category G: Geolocation data.
    Examples: Approximate physical location.
    Collected: No.
  • Category H: Sensory data.
    Examples: Audio, electronic, visual, thermal, olfactory, or similar information.
    Collected: No.
  • Category I: Professional or employment-related information.
    Examples: Current or past job history or performance evaluations.
    Collected: No.
  • Category J: Non-public education information (per the Family Educational Rights and Privacy Act (20 U.S.C. Section 1232g, 34 C.F.R. Part 99)).
    Examples: Education records directly related to a student maintained by an educational institution or party acting on its behalf, such as grades, transcripts, class lists, student schedules, student identification codes, student financial information, or student disciplinary records.
    Collected: No.
  • Category K: Inferences drawn from other personal information.
    Examples: Profile reflecting a person’s preferences, characteristics, psychological trends, predispositions, behavior, attitudes, intelligence, abilities, and aptitudes.
    Collected: No.

Under CCPA, personal information does not include:

  • Publicly available information from government records
  • Deidentified or aggregated consumer information
  • Information excluded from the CCPA’s scope, such as:
    • Health or medical information covered by the Health Insurance Portability and Accountability Act of 1996 (HIPAA) and the California Confidentiality of Medical Information Act (CMIA) or clinical trial data
    • Personal Information covered by certain sector-specific privacy laws, including the Fair Credit Reporting Act (FRCA), the Gramm-Leach-Bliley Act (GLBA) or California Financial Information Privacy Act (FIPA), and the Driver’s Privacy Protection Act of 1994


We obtain the categories of personal information listed above from the following categories of sources:

  • Directly from You. For example, from the forms You complete on our Service, preferences You express or provide through our Service.
  • Indirectly from You. For example, from observing Your activity on our Service.
  • Automatically from You. For example, through cookies We or our Service Providers set on Your Device as You navigate through our Service.
  • From Service Providers. For example, third-party vendors to monitor and analyze the use of our Service, or other third-party vendors that We use to provide the Service to You.


We may use or disclose personal information We collect for “business purposes” or “commercial purposes” (as defined under the CCPA), which may include the following examples:

  • To operate our Service and provide You with our Service.
  • To provide You with support and to respond to Your inquiries, including to investigate and address Your concerns and monitor and improve our Service.
  • To fulfill or meet the reason You provided the information. For example, if You share Your contact information to ask a question about our Service, We will use that personal information to respond to Your inquiry.
  • To respond to law enforcement requests and as required by applicable law, court order, or governmental regulations.
  • As described to You when collecting Your personal information or as otherwise set forth in the CCPA.
  • For internal administrative and auditing purposes.
  • To detect security incidents and protect against malicious, deceptive, fraudulent or illegal activity, including, when necessary, to prosecute those responsible for such activities.

Please note that the examples provided above are illustrative and not intended to be exhaustive. For more details on how we use this information, please refer to the “Use of Your Personal Data” section.

If We decide to collect additional categories of personal information or use the personal information We collected for materially different, unrelated, or incompatible purposes We will update this Privacy Policy.


We may use or disclose and may have used or disclosed in the last twelve (12) months the following categories of personal information for business or commercial purposes:

  • Category A: Identifiers
  • Category B: Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e))
  • Category F: Internet or other similar network activity

Please note that the categories listed above are those defined in the CCPA. This does not mean that all examples of that category of personal information were in fact disclosed, but reflects our good faith belief to the best of our knowledge that some of that information from the applicable category may be and may have been disclosed.

When We disclose personal information for a business purpose or a commercial purpose, We enter a contract that describes the purpose and requires the recipient to both keep that personal information confidential and not use it for any purpose except performing the contract.


As defined in the CCPA, “sell” and “sale” mean selling, renting, releasing, disclosing, disseminating, making available, transferring, or otherwise communicating orally, in writing, or by electronic or other means, a consumer’s personal information by the business to a third party for valuable consideration. This means that We may have received some kind of benefit in return for sharing personal information, but not necessarily a monetary benefit.

Please note that the categories listed below are those defined in the CCPA. This does not mean that all examples of that category of personal information were in fact sold, but reflects our good faith belief to the best of our knowledge that some of that information from the applicable category may be and may have been shared for value in return.

We may sell and may have sold in the last twelve (12) months the following categories of personal information:

  • Category A: Identifiers
  • Category B: Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e))
  • Category F: Internet or other similar network activity


We may share Your personal information identified in the above categories with the following categories of third parties:

  • Service Providers
  • Our affiliates
  • Our business partners
  • Third party vendors to whom You or Your agents authorize Us to disclose Your personal information in connection with products or services We provide to You


We do not sell the personal information of Consumers We actually know are less than 16 years of age, unless We receive affirmative authorization (the “right to opt-in”) from either the Consumer who is between 13 and 16 years of age, or the parent or guardian of a Consumer less than 13 years of age. Consumers who opt-in to the sale of personal information may opt-out of future sales at any time. To exercise the right to opt-out, You (or Your authorized representative) may submit a request to Us by contacting Us.

If You have reason to believe that a child under the age of 13 (or 16) has provided Us with personal information, please contact Us with sufficient detail to enable Us to delete that information.


The CCPA provides California residents with specific rights regarding their personal information. If You are a resident of California, You have the following rights:

  • The right to notice. You have the right to be notified which categories of Personal Data are being collected and the purposes for which the Personal Data is being used.
  • The right to request. Under CCPA, You have the right to request that We disclose information to You about Our collection, use, sale, disclosure for business purposes and share of personal information. Once We receive and confirm Your request, We will disclose to You:
    • The categories of personal information We collected about You
    • The categories of sources for the personal information We collected about You
    • Our business or commercial purpose for collecting or selling that personal information
    • The categories of third parties with whom We share that personal information
    • The specific pieces of personal information We collected about You
    • If we sold Your personal information or disclosed Your personal information for a business purpose, We will disclose to You:
      • The categories of personal information categories sold
      • The categories of personal information categories disclosed
  • The right to say no to the sale of Personal Data (opt-out). You have the right to direct Us to not sell Your personal information. To submit an opt-out request please contact Us.
  • The right to delete Personal Data. You have the right to request the deletion of Your Personal Data, subject to certain exceptions. Once We receive and confirm Your request, We will delete (and direct Our Service Providers to delete) Your personal information from our records, unless an exception applies. We may deny Your deletion request if retaining the information is necessary for Us or Our Service Providers to:
    • Complete the transaction for which We collected the personal information, provide a good or service that You requested, take actions reasonably anticipated within the context of our ongoing business relationship with You, or otherwise perform our contract with You.
    • Detect security incidents, protect against malicious, deceptive, fraudulent, or illegal activity, or prosecute those responsible for such activities.
    • Debug products to identify and repair errors that impair existing intended functionality.
    • Exercise free speech, ensure the right of another consumer to exercise their free speech rights, or exercise another right provided for by law.
    • Comply with the California Electronic Communications Privacy Act (Cal. Penal Code § 1546 et. seq.).
    • Engage in public or peer-reviewed scientific, historical, or statistical research in the public interest that adheres to all other applicable ethics and privacy laws, when the information’s deletion may likely render impossible or seriously impair the research’s achievement, if You previously provided informed consent.
    • Enable solely internal uses that are reasonably aligned with consumer expectations based on Your relationship with Us.
    • Comply with a legal obligation.
    • Make other internal and lawful uses of that information that are compatible with the context in which You provided it.
  • The right not to be discriminated against. You have the right not to be discriminated against for exercising any of Your consumer’s rights, including by:
    • Denying goods or services to You
    • Charging different prices or rates for goods or services, including the use of discounts or other benefits or imposing penalties
    • Providing a different level or quality of goods or services to You
    • Suggesting that You will receive a different price or rate for goods or services or a different level or quality of goods or services


In order to exercise any of Your rights under the CCPA, and if You are a California resident, You can contact Us:

  • By email:

Only You, or a person registered with the California Secretary of State that You authorize to act on Your behalf, may make a verifiable request related to Your personal information.

Your request to Us must:

  • Provide sufficient information that allows Us to reasonably verify You are the person about whom We collected personal information or an authorized representative
  • Describe Your request with sufficient detail that allows Us to properly understand, evaluate, and respond to it

We cannot respond to Your request or provide You with the required information if We cannot:

  • Verify Your identity or authority to make the request
  • And confirm that the personal information relates to You

We will disclose and deliver the required information free of charge within 45 days of receiving Your verifiable request. The time period to provide the required information may be extended once by an additional 45 days when reasonably necessary and with prior notice.

Any disclosures We provide will only cover the 12-month period preceding the verifiable request’s receipt.

For data portability requests, We will select a format to provide Your personal information that is readily usable and should allow You to transmit the information from one entity to another entity without hindrance.


You have the right to opt-out of the sale of Your personal information. Once We receive and confirm a verifiable consumer request from You, we will stop selling Your personal information. To exercise Your right to opt-out, please contact Us.

The Service Providers we partner with (for example, our analytics or advertising partners) may use technology on the Service that sells personal information as defined by the CCPA law. If you wish to opt out of the use of Your personal information for interest-based advertising purposes and these potential sales as defined under CCPA law, you may do so by following the instructions below.

Please note that any opt out is specific to the browser You use. You may need to opt out on every browser that You use.


You can opt out of receiving ads that are personalized as served by our Service Providers by following our instructions presented on the Service:

The opt out will place a cookie on Your computer that is unique to the browser You use to opt out. If you change browsers or delete the cookies saved by your browser, You will need to opt out again.


Your mobile device may give You the ability to opt out of the use of information about the apps You use in order to serve You ads that are targeted to Your interests:

  • “Opt out of Interest-Based Ads” or “Opt out of Ads Personalization” on Android devices
  • “Limit Ad Tracking” on iOS devices

You can also stop the collection of location information from Your mobile device by changing the preferences on Your mobile device.


Our Service does not respond to Do Not Track signals.

However, some third party websites do keep track of Your browsing activities. If You are visiting such websites, You can set Your preferences in Your web browser to inform websites that You do not want to be tracked. You can enable or disable DNT by visiting the preferences or settings page of Your web browser.


The Service may contain content appropriate for children under the age of 13. As a parent, you should know that through the Service children under the age of 13 may participate in activities that involve the collection or use of personal information. We use reasonable efforts to ensure that before we collect any personal information from a child, the child’s parent receives notice of and consents to our personal information practices.

We also may limit how We collect, use, and store some of the information of Users between 13 and 18 years old. In some cases, this means We will be unable to provide certain functionality of the Service to these Users. If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent’s consent before We collect and use that information.

We may ask a User to verify its date of birth before collecting any personal information from them. If the User is under the age of 13, the Service will be either blocked or redirected to a parental consent process.


The Company may collect and store persistent identifiers such as cookies or IP addresses from Children without parental consent for the purpose of supporting the internal operation of the Service.

We may collect and store other personal information about children if this information is submitted by a child with prior parent consent or by the parent or guardian of the child.

The Company may collect and store the following types of personal information about a child when submitted by a child with prior parental consent or by the parent or guardian of the child:

  • First and/or last name
  • Date of birth
  • Gender
  • Grade level
  • Email address
  • Telephone number
  • Parent’s or guardian’s name
  • Parent’s or guardian’s email address

For further details on the information We might collect, You can refer to the “Types of Data Collected” section of this Privacy Policy. We follow our standard Privacy Policy for the disclosure of personal information collected from and about children.


A parent who has already given the Company permission to collect and use his child personal information can, at any time:

  • Review, correct or delete the child’s personal information
  • Discontinue further collection or use of the child’s personal information

To make such a request, You can write to Us using the contact information provided in this Privacy Policy.


Under California Civil Code Section 1798 (California’s Shine the Light law), California residents with an established business relationship with us can request information once a year about sharing their Personal Data with third parties for the third parties’ direct marketing purposes.

If you’d like to request more information under the California Shine the Light law, and if You are a California resident, You can contact Us using the contact information provided below.


California Business and Professions Code Section 22581 allows California residents under the age of 18 who are registered users of online sites, services or applications to request and obtain removal of content or information they have publicly posted.

To request removal of such data, and if You are a California resident, You can contact Us using the contact information provided below, and include the email address associated with Your account.

Be aware that Your request does not guarantee complete or comprehensive removal of content or information posted online and that the law may not permit or require removal in certain circumstances.


Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party’s site. We strongly advise You to review the Privacy Policy of every site You visit.

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.


We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.

We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the “Last updated” date at the top of this Privacy Policy.

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.


If you have any questions about this Privacy Policy, You can contact us:

  • By email: