Answers on questions

How do I work with synonyms?

You can use the dashboard on the project editing page to add a list of synonyms.
The words are separated from the synonyms by commas, and the synonyms are separated from each other by a red line.

Example:
phone,smartphone
phone,cell phone
phone,mobile phone

Synonym formation rules
Permissible constructions for working with synonyms:

  • Single word, single word
  • Single word, many words

Examplesingle word, single word:
phone, smartphone

Examplesingle word, many words:
smartphone, cell phone

The order is important
Synonym binding works one-way only.
Example:
Saw,chainsaw

In this case, the search querysaw will cause chainsaws to display. However, onlychainsaws will be displayed when querying for a chainsaw.
In order for chainsaws to be displayed, you need to add another pair of bound synonyms:
chainsaw,saw

The letter case does not matter.

How can I change the display format of products in search results?

Vue.js templates have been created at the product card display level.
You can create your own template at the level of each category to override CSS styles.

What is the query response time?

The average query response time is under 100 ms.

How do I install the code?

Several ways to install the code exist:

  1. directly into the page’s HTML code (you can watch video instructions in your personal account)
  2. via Google Tag Manager
What products will the user see after submitting a search query?

The search results include all the products transferred using the YML file you specified in the project settings in the dashboard.

You can also check the “Consider availability” box after loading the feed. In this case, the user will only see the in-stock products based on the corresponding tag from the YML feed.

How do I redesign the search module, e.g. change link color and font?

CSS customization

  • all classes begin with l-ss-c-*
  • all page styles described as

<style class=”l-ss-styles”>
.l-ss-c-search-input {
border: 1px dashed #000;
}
</style>
will be copied inside elements

  • all host element wrappers have classes

l-ss-c-host-wrapper
l-ss-c-host-wrapper-is-[type] -> l-ss-c-host-wrapper-is-search-input

l-ss-c-is-mobile — detected mobile device

l-ss-c-is-phone-only-small

l-ss-c-is-phone-only-small — screen size >= 100px
l-ss-c-is-phone-only — screen size >= 599px
l-ss-c-is-tablet-portrait-up — screen size >= 600px
l-ss-c-is-tablet-landscape-up — screen size >= 900px
l-ss-c-is-desktop-up — screen size >= 1200px
l-ss-c-is-big-desktop-up — screen size >= 1800px

l-ss-c-host-wrapper-is-ready

  • all root elements within a custom element can have classes

l-ss-c-[name], ex. l-ss-c-search-popup

l-ss-c-is-not-responsive — missing meta tag
l-ss-c-is-mobile — detected mobile device

l-ss-c-is-phone-only-small — screen size >= 100px
l-ss-c-is-phone-only — screen size >= 599px
l-ss-c-is-tablet-portrait-up — screen size >= 600px
l-ss-c-is-tablet-landscape-up — screen size >= 900px
l-ss-c-is-desktop-up — screen size >= 1200px
l-ss-c-is-big-desktop-up — screen size >= 1800px

Can the widget be branded?

Yes. You can add branding by sending a request to the support chat.
See here for a branding example.

How can I bind the code to different search strings?

To do this, you need to add the line e.CombinedSearchInput.mount to specify an additional connection element

! function(e, t, n, c, o) {
e[o] = e[o] || function() {
(e[o].a = e[o].a || []).push(arguments)
}, e[o].h = c, e[o].n = o, e[o].i = 1 * new Date, s = t.createElement(n), a = t.getElementsByTagName(n)[0], s.async = 1, s.src = c, a.parentNode.insertBefore(s, a)
}(window, document, «script», «https://cdn2.searchbooster.net/scripts/v2/init.js«, «searchbooster»), searchbooster({
«theme»: «base»,
«apiUrl»: «//api4.searchbooster.io»,
«popup»: {
«search»: true
},
«apiKey»: «********************»,
«search»: {
«groupCategories»: true
},
initialized: function(e) {
        e.CombinedSearchInput.mount(‘#mob-search-input’);
              e.CombinedSearchInput.mount(‘#title-search-input’);
}
});

Can I track the the user clicking a product link?

Yes, if the event has been transmitted to us, or if the user followed our redirect.

Does the E-commerce rate include searching via a mobile app or telegram bot?

Yes. Any rate with API integration allows using API in mobile apps, CRM, or for any other purposes

How does search by image work?

We download images from the product feed and feed them to a neural network. The neural network converts the images into a set of numeric characteristics. When a user uploads an image, it is also fed to the neural network. The search results contain images with the lowest vector distance between them and the image the user used for the search

Can products be grouped into cards, such as by color and volume? E.g., paint can come in different volumes and colors. If yes, then how is it done? What is the maximum number of parameters to be grouped into a card?

At the moment, we account for the GroupID parameter; only one product from the group is displayed in the search results (considering filters). If you want such cards to be displayed, then it can be done on the client side with API integration. In our widget, such filters are only possible at the entire search results level, not at the individual products level. Filters may be a viable alternative.

Can search suggestion positions be influenced?

You can transmit numeric parameters used for calculating suggestion positions.

Can some suggestion types (search history, category) be changed/removed?

Not at the moment, but it may be done at some point.

How can I influence product positions in the listing?

You can specify a custom ranking formula, e.g., focusing on the products’s numeric parameters, accounting for stock, adjusting the number of possible typos.

How do I change the font size?

You can make changes on your side to the inline CSS version:

<style class=»l-ss-c-styles»>
.l-ss-c-root {
font-size: 16px;
}
</style>

In what format should I submit the feed?

The universal format is YML (Yandex Market Language). We can convert your feed into the required format if necessary, for example from CSV.

How can I check my feed for validity?

You can check your feed for validity by yourself here:https://webmaster.yandex.ru/tools/xml-validator/
You need to select Market, and then load the file for validation via a link, for example, from a cloud storage.
We can also convert your feed into YML from any format you like, if necessary.

Is search by region possible?

There is an option to search by specific region, while accounting for product availability in the region, delivery possibility, etc. To do a search of this kind, you need to specify this data in the feed, e.g., in the following format:
<region id=»RU-AD»>
    <available>true</available>
    <price>23</price>
    <id>123</price>
            …
 </region>

Is voice search available?

Yes.

Is search by image available?

Yes, products can be searched by uploading images as files or via links.

We operate in Ukraine. Can there be integration issues?

There will be no issues. All problems of this kind have been solved at this stage. We already have a number of active clients from Ukraine.

Is the search multi-language?

Yes, searching in different languages is possible. For example, in Russian and Ukrainian.

How is the cost of services formed?

You can check the rates on our website. In general, the cost depends on how often the feed is updated, as well as on the number of items in your catalog. If a separate cluster has to be deployed for your store, this may also affect the cost.

Is live search available?

Yes. You only need to make small changes to the widget code to enable live search. We can help you do that.

The search results feature products other than the ones I was looking for. Why does this happen, and what do I do?

You can configure output filtering in the project. The search results may vary from full direct query text match to the most advanced formats with displaying products that only slightly match the query.
You may consider the following set of steps:
Strict search with autocomplete; strict search with layout correction; default search; default search with layout correction, etc. The search proceeds to the next step only if nothing has been found on the previous one.

Can a search be set up in such a way that the “nothing found” situation becomes impossible?

Yes, but the results may get not very relevant this way (if the desired product does not exist at all or it is called something else).

We have custom product parameters in our feed. Can they be searched for?

Yes, we can search for such parameters as well.

Can letters be used in the price field? E.g., “Last Sale Price.”

At this stage, it won’t take letters. Price is a strictly numeric field. All other information you might need can be transmitted in other tags.

What product labels are there?

Out of the box, we have the “In Stock” and “Manufacturer’s Warranty” labels. We can add whatever you need to the list.

Can labels like “In stock” be removed?

Yes. We can turn them on and off at your request.

Can products be ranked by popularity in search results?

We can rank the product by any metric you want. It can be not only popularity, but also something like margin. You can transmit the data from your side, or we can adjust the popularity of products ourselves.
To transmit an indicator, you need to create a separate tag in the feed, for example, <param name=”popularity”>.

Is there the number of products the search can return limited? Or is everything matching the query displayed? If the number is limited, how can this limit be changed?

The number of results is set by the following parameters: limit (how many strings to output) and skip (starting from which string).

Are manual suggestions tied to potential user queries?

Yes. They are synchronized with the user query that’s already been entered.

Are there any search statistics?

Yes. You can review them in the project. We can also send data to Google Analytics, if you have set up an internal search statistics module.

Can I set the timeframe for which the statistics are given?

By default, the statistics are given for the entire period. They can be ranked by time (for example, to see information for the last week).

Suppose I have several websites for a single store, e.g., msk.market.ru and spb.market.ru. How will statistics be collected in this case?

Statistics in your personal account are collected by specific feed. If the feed is the same for all websites, the statistics will be shared.

Do I need to send you statistics for clicks on products in search results, or do you keep your own?

We collect information about clicks in our widget, but if you are using integration via API, then you’ll have to send it separately.

How can I access the project in my personal account?

Sign up at admin.searchbooster.io. After that, you’ll be able to create your own project. We can also do it for you and give you access. Unfortunately, accessing the same project from different accounts is not possible at this time.

How do I manage the filters?

This can be done in the Categories section of the project. The filters are tied to specific categories.

What does feed updating mean?

We will periodically reload the product feed and synchronize the search with it. If you added something new to the feed, it will only appear in the search after it is updated.

Why don’t some products appear in the suggestions?

As of now, up to 3 products are shown. We will expand this number in the near future, making it flexible based on the total number of suggestions found.

Suppose I have several websites for a single store, e.g., msk.market.ru and spb.market.ru. How will integration work in this case?

For successful integration in the feed, you’ll need to specify relative links and distribute our code across all websites.

Do you use contracts or offers?

We use service contracts.

What are the alternative payment methods?

We can accept cash or a corporate card.

How do you work with clients who are not residents of the Russian Federation?

We can work with such clients.
There are two ways to do this:
1. Generating an electronic invoice. You can pay it with a personal or corporate bank card. After payment, you’ll be issued a cashier’s receipt.
2. Contract-based payment. In this case, a contract between our legal entities will be concluded.
The contract will have Moscow as the judicial zone.

Is the uuid parameter some kind of constant linked to the website, or should it be obtained by separate queries?

Yes, it is a separate constant. We will give it to you, so you can use it in all your queries.

How is the searchId query parameter generated, and what does it affect?

It’s needed to track statistics. For each searchId, we log clicks and can see what a particular user searched for and what they clicked. We then use this information for machine learning. It’s generated randomly in the widget for the client. You can do the same via API.

There’s something called labels in the Offer scheme. What are they for and where do they come from?

These are the labels displayed next to the product in the search results. You can check the questions about them above.

The YML template has a “brands” section. Where is it used? Is it mandatory?

It isn’t. It’s used to generate links to brands. The user can click it in the suggestion to go straight to the brand page.

The YML description states that a custom “url” attribute is used for categories. What is it for?

It’s used to quickly jump to a category page from the suggestions. Just like brands, it isn’t mandatory.

An example of code to install on the website

You can add the code to any HTML using Google Tag Manager.

<div>
<div id="search-node" class="input-lg"></div>
</div>

<script>
(function (e, t, n, o, c) {
e[c] = e[c] || function () {
(e[c].a = e[c].a || []).push(arguments);
}, e[c].h = o, e[c].n = c, e[c].i = 1 * new Date, s = t.createElement(n), a = t.getElementsByTagName(n)[0], s.async = 1, s.src = o, a.parentNode.insertBefore(s, a);
})(window, document, 'script', 'https://cdn.searchbooster.io/v1/init.js', 'searchbooster');

searchbooster({
theme: 'base',
apiUrl: '//api2.searchbooster.io',
popup: {
search: true
},
apiKey: 'QWERTY-QWERTY-000-000-qwerty123456', #unique service activation key
initialized: function(SearchBooster) {
SearchBooster.CombinedSearchInput.mount('#search-node'); #search-node is the id of the page element to which the search function is attached
},
});
</script>

<div id="search-node" class="input-lg"></div> #div on your website that is the search field