I have an online grocery store, products have such attributes:
product name (Pepsi, 7UP)
container (1 bottle, 1 can)
variant name (diet, max)
I want my Azure Search solution to suggest users required product regardless of search terms order (diet Pepsi, 1 can Pepsi, Pepsi 1 can), but with no luck.
I wonder, if the only way to do this is to compute a "keywords cloud" which will contain all possible permutations and use this "keywords cloud" field as a suggester field? Example of such "keywords cloud" field value: "Pepsi diet 1 can diet Pepsi 1 can Pepsi".
Azure Search search solution somehow does the trick, but I can't use it because it doesn't support typeahead (AFAIK).
Any insight will be appreciated.
Suggestions are built for cases where you want to progressively discover a short phrase. In your case it looks like what you want is to search for any word across the documents, in any order. For that you could simply issue a search request instead of a suggest request in each keystroke. That will execute a keyword search, which seems like it's what you're looking for.
If you want the last word to be treated as partial input, you could do the following trick assuming you target languages that separate words with whitespace: take the input text, split out the last word (i.e. go backwards from the end of the string until you find a non-character/number symbol) and then produce a string of the form "original-minus-last (last|last*)". For example, if the input is "Can Pepsi Di", you'd produce "Can Pepsi (Di|Di*)".
Related
Do we have any feature available on azure cognitive search for collapsing or grouping the results which is a most important and basic search feature available on most of the search engines.
example solr - https://solr.apache.org/guide/6_6/collapse-and-expand-results.htmlhttps://solr.apache.org/guide/6_6/collapse-and-expand-results.html
example - if i have a shirt in 4 different variant and search query returns all the 4 search result we can group them together and show only one result which can be taken as default.
Did anyone achieved this in azure cognitive search ?
Thanks,
Navneet
One thing you can try is, when modeling the index mark the t-shirt size as Facetable.
In the following example, Business Title was marked as Facetable:
I'm trying to write an intent in Dialogflow that requires the user to fill both a room as well as an object.
I need to determine if the room is part of a house (check in entity 1) and if the object is made of glass (check in entity 2).
In English, for instance, that would result in '[kitchen] [window]', however I have to do this in Dutch, where a lot of words are combined.
Users should be able to say 'the window of my kitchen is damaged', but in Dutch it is more natural to say 'keukenraam', so: 'my kitchenwindow is damaged.
This one word combines location and object, but I have not been able to use one word to fill two entities.
Does anybody have a good suggestion, because I can't find a proper solution for this problem.
Does anybody know if there is an RSS Aggregator around whereby I can:
select any number of RSS feeds (just normal functionality - so I can select the LA Times, the NY Times, whatever feeds I like) and
input any number of search terms (boolean operators)
And have the ONLY output be items that match those search terms?
Basically, I would select all the major news feeds and then enter my search terms - and I'd see results only for the subjects I'm interested in. The results wouldn't be sorted/shown by feed, but by subject (i.e., search term).
Does such an app exist?
Online newsreader Inoreader (in its "Pro" version) have a "filter" and a "rule" feature where you can create such filters with boolean operators or regex. You can operate on single feed, folder or all feeds.
You also have an "active search" feature. You can create a special folder where all the items responding to your search will appear in this folder.
Self-hosted open source newsreader Tiny Tiny RSS, have also a filter feature (regex only).
If it fits your goals, the two platforms may allocate a tag to each responding item. The tag, then can generate an "outgoing feed".
I have one issue which I am in desperate need for your help. I am on Magento ver. 1.6.1.0, whenever I am searching with a sentence like "baby's cute shoes" in magento then the results are not accurate but when I search only a word like "cute" or "shoes" then it gives me the result.
I have a feeling that magento is not able to search a sentence but it is able to search products with words. Is there anything I can do to better optimize the search in magento?
The options for search can be found in the backend under System > Catalog > Catalog search, you probably have search type set to LIKE. You will potentially get better results using FULLTEXT mode.
Magento does not search the entered string as a full sentence. Instead it splits (tokenizes) your search string into words and will search for products containing ANY of these words (implementing "OR" logic). So if you are searching for "red shoes", it will find everything containing words "red" OR containing words "shoes". Obviously it is not very useful in most cases as it will produce a lot of totally irrelevant results.
You can check this free extension to refine your search: Catalog Search Refinement FREE. This extension modifies the search behavior to only find the products that have ALL keywords ("AND" logic in other words). This will find only products that have both "red" and "shoes" keywords. There is also Advanced Search version of that extension that also looks up for similar words based on phonetic distance among other things as well as weighted search attributes, allowing to bubble up the most relevant products.
I got my issue resolved by this link - https://stackoverflow.com/questions/1953715/magento-search-not-returning-expected-results
I went to this line in app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php
and did this (below)
copy app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php to app/code/local/Mage/CatalogSearch/Model/Mysql4/Fulltext.php
line 341 - 343 app/code/local/Mage/CatalogSearch/Model/Mysql4/Fulltext.php
if ($like) {
$likeCond = '(' . join(' OR ', $like) . ')';
}
change into
if ($like) {
$likeCond = '(' . join(' AND ', $like) . ')';
}
Also make sure to change the order in which the results are shown. Default Magento is to serve it backwards.
Add the following to /app/design/frontend/default/default/layout/catalogsearch.xml
<reference name="search_result_list">
<action method="setDefaultDirection"><string>asc</string></action>
<action method="setDefaultOrder"><string>relevance</string></action>
</reference>
Between the following:
<catalogsearch_result_index translate="label">
...
</catalogsearch_result_index>
Stock Magento search needs a few tweaks to get it functional. The Like search was changed from AND logic to OR logic in 1.5/1.6 and gives better results when reverted back to AND logic. This has been solved in several threads over in the Magento forums on Magento's website. Another fix is to to chop the s off of plurals which is also addressed over there.
The reason for cutting trailin "s" is that most people don't search for "an oil pressure gauge", but "oil pressure gauges" which gives total misses when you're selling a "0-100 psi Oil Pressure Gauge". Also alias all items ending in "ies" to their singular. Rarely do you sell an "rc aircraft batteries", it will be specific like "1200aH aircraft battery" and so your less savvy customer's searches never match.
"Baby's cute shoes" will never register a hit unless it shows up in the items you use to populate the Fulltext search index. Who sells an item called "baby's cute shoes" anyway? I usually synonym these types of searches to hit a specific category where the items are listed. Some customer searches are just too subjective to match the objective nature of product search (actual items vs. nebulous idea).
I want to implement a search that will rank results higher, if previous, similar searches have led users to click on a result.
Is that possible with either Solr (Lucene) or Sphinx?
I think, tracking of user clicks is necessary. (if the higher ranking depends on user clicks)
For "ranking higher" the results, maybe the solr-elevator function could be helpful for your needs: http://wiki.apache.org/solr/QueryElevationComponent
Probably the elevation-function is more helpful than the lucene boost function (in your case). http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Boosting%20a%20Term
Finlay it depends of the kind of implementation, i think.
It's certainly possible with Solr (Lucene), but not really feasible. What you'd have to do is:
Track the clicks of users
Normalize the search query to group similar queries and store them
Reindex that into Solr
If you ask me, that sounds like a lot of work with a lot of pitfalls.
With Sphinx you could use additional attribute clicks_count and use such query to rank clicked documents higher
SELECT *, clicks_count*1000 AS cc
FROM your_index
WHERE MATCH ("words to match") ORDER BY cc DESC;
to get only clicks wight into account
or
SELECT *, weght() + clicks_count*10000 AS cc
FROM your_index
WHERE MATCH ("words to match") ORDER BY cc DESC;
to get match weight with clicks weight into account
Of course you have update your counter 'clicks_count'.