Architecture :: Advanced Search Of Product Catalog
Nov 21, 2010
I am wondering if there are any good articles you could point me to that would present the implementation details or options for delivering advanced search capabilities. Like what we see at [url] and similar Web sites offering vast numbers of products to be searched. The search process for these starts with a simple "Search" text box - usually with auto-suggest. Then the user can drill down and narrow the search by [for example] price, manufacture, size, capacity, and other relevant attributes of the product being searched.
When I navigate such sites and search for products, drilling down into the various categories, it's easy to think that there is some complex engine behind the scenes that generates dynamic SQL to satisfy the various and potentially extensive criterion required to satisfy the search requests.
Or could it be simpler than that? In any case, I understand this question may not have a specific answer; so I'm hoping for some article or reference implementation I could study. Short of that, if any of you have implemented advanced search of a product catalog (presumably searching products stored in a reasonably normalized database; through 3NF or so); any critical implementation considerations would be appreciated. I'm particularly interested in the meta data that may have to be present in the underlying data set in order to satisfy some of the search requests.
i m developing a product Catalog. All fine, i want to manage wish list for product, which user wish to see, now my question is that how can i manage this wish list, coz i have no uniqueness of the user, coz ny one whether it is registerd or not can wish the product in my scope, i thought to distinguish the user by their IP address becoz this wish list is temporaray, how can i delete the record when user close the browser if go to the IP address for distinguish..
I am building UI for a large product catalog (millions of products).
I am using Sql Server, FreeText search and ASP.NET MVC.
Tables are normalized and indexed. Most queries take less then a second to return.
The issue is this. Let's say user does the search by keyword. On search results page I need to display/query for:
Display 20 matching products on first page(paged, sorted) Total count of matching products for paging List of stores only of all matching products List of brands only of all matching products List of colors only of all matching products
Each query takes about .5 to 1 seconds. Altogether it is like 5 seconds.
I would like to get the whole page to load under 1 second. There are several approaches:
Optimize queries even more. I already spent a lot of time on this one, so not sure it can be pushed further.Load products first, then load the rest of the information using AJAX. More like a workaround. Will need to revise UI.Re-organize data to be more Report friendly. Already aggregated a lot of fields.
I checked out several similar sites. For ex. [URL]. Not only they display the same information as I would like in under 1 second, but they also include statistics (number of results in each category).
The following is the search for keyword "white" [URL] How do sites like zappos, amazon make their results, filters and stats appear almost instantly?
Is there any good code (paid or open source) out there for:Handling PPC ads on our site? This would (hopefully) include pages to create ads, reports of ads run, determining what ad to show, and tracking billing.Adding comments to our site? This would (hopefully) include up/down/inappropiate votes on other's comments.A product catalog? This would (hopefully) include advanced search and entering product items.
I'm working on a asp.net forms web application where I've got advanced search form with grid listing results below. Grid is sortable and pageable. Grid is listing products.
I've got two requirements :
1) make the url remember the advanced search form state so search results page can be bookmarked etc.
2) on the product details page there is a back button that should take the user to the advanced search page with the same settings in the form and same grid state.
I have implemented a workaround to above two problems but I don't think my solution is very clean and I'd like to hear better ideas. My workaround is as follows :
1) I iterate through form fields and I put values into the querystring after the hash. So when the page is loaded it gets the values from url if available.
2) when user clicks a link to product details page from the grid I use javascript to create a cookie with url to advanced search page so when rendering the product details page I know the url for the back button.
I want to be able to make a query from three dropdownlists but not all three have to be selected to create results. This is what I have so far :
sub getdata (src as object, e as eventargs) dim strsql as string dim myconnection as oledbconnection dim mycommand as oledbcommand myconnection = new oledbconnection(ConfigurationSettings.AppSettings("MM_CONNECTION_STRING_csrdb")) strsql ="SELECT tbl_case.Case_id, tbl_case.Title, tbl_case.Description, Tbl_Country.Country_Name, tbl_principle.Principle_Name," _ & "tbl_keyword.Keyword FROM tbl_keyword INNER JOIN ((tbl_principle INNER JOIN (Tbl_Country INNER JOIN tbl_case ON Tbl_Country.Country_Id tbl_case.country) ON tbl_principle.Principle_ID = tbl_case.Principle) INNER JOIN tbl_Usedkeywords ON tbl_case.Case_id = tbl_Usedkeywords.case) ON tbl_keyword.Keyword_id = tbl_Usedkeywords.keyword " _ & "WHERE " if DLPrinciple.selectedindex=0 then strsql = strsql & "((tbl_principle.Principle_Name) like '%')" else if DLCountry.Selectedindex=0 then strsql = strsql & "((tbl_country.country_Name) like '%')" else if DLKeyword.selectedindex=0 then strsql = strsql & "((tbl_keyword.Keyword) like '%')" else strsql = strsql & "((tbl_principle.principle_Name) = '" & session("infoprinciple") & "')" + "((tbl_country.country_Name) = '" & session("infoland") & "')" + "((tbl_keyword.keyword) = '" & session("infokeyword") & "')" end if end if end if
This is working perfectly with only one dropdownlist but I can not figure out how to make it work with several.
I am going to create the SAAS (Software as a service) Application. Can you please provide all the attributes that we have to consider in SAAS application (for example usability, pluggable architecture etc .. )
How architecture should be build for this project, provide sample architecture for SAAS application. This architecture should be easy to upload and upgrade or degrade the features. Error handling should be easy.
I am tring to build a page with advanced search options. Here is my code am I on the right path. What I wnat this to do is if you put something in any one of the textboxes it will filter by that column.
I'm refactoring an old website that has product search code littered throught the codebehind. I'm trying to encapsulate the search logic into its own class so I've created a Product class with a Search() method. I would like some suggestions about OO best practices so that the class is reusable and maintainable. The questions I have are:
- Should I make the search() method an instance method or make it static? For now the class is just really there to encapsulate my search logic
- If I make it an instance method should it return a list of products or should it populate a member property that I can access like p.Search(); var x = p.ProductList;
- The search method requires upward of 7 parameters of different types, what's the best way to provide them? - pass them all i.e. p.Search (param1, param2, ..., param7) - create a SearchParams structure in the class, populate it and pass that i.e. p.Search(searchParams) - Instantiate a Product object and set properties on it that are used by the Search method i.e. p.ID = 123; etc.... p.Search();
I've used variations of the above before but would like to know what's the best way.
I need some guidance for an application I am working on. I have searched the web and the forum and found parts that answer my questions but I want to do this correctly. My solution uses LINQ to SQL to model the db and I have a repository that is querying my db everytime a controller needs to get some data for the view. I am initially anticipating a maximum of only about a few hundreds hits per day (if that). The website is a directory, with listings and requires a search functionality.
1. What options should I consider to avoid having my repository query the db everytime
2. The site contains a 'search' option, how can I implement this against my repository?
I guess I'm really looking for someone to point me in the right direction. So far I've looked at 'caching' the LINQ to SQL model and Lucene.NET but both seem overkill or am I missing the point?
I need to create a search engine for my website that searches my entire content and files stored in a database.What is the best way and easy to accomplish this?If can, please provide a few samples or links.
not sure if I'm posting to the right thread or not.. but here is the questiondoes anyone know how to implement a best pratice on SEO?One of the example is: if the user types "brand new canon camera" then I want the system to find a sequence of string in the database that contains "new", "cannon", "camera". It is ok with or without the word "brand". However if the user types "HP laptop DV1000" and i want the system to find all HP laptop whether new or not but limited to specific series.
I would like a site that offers the users the possibility to search over 2 datasources but as i tried to indicate in the subject title the searches are one after another where the result of search 1 is used as a parameter for searching the second datasource. The order of the search would depend for what you search (ideally). Some "fields" or "data" of course appear in both datasources.
To get more specific: datasource 1 contains chemical structures and the associated "id" for this structure + additonal properties. You can search for chemical structures here. (chemically intelligent system). datasource 2 contains documents which are indexed (full text) and have metadata fields one of them beeing above id. No chemical search possible.
The idea is now that i perform a search by chemical structure on datasource 1. As as a result I get a list of id's. These id's are then past into datasource 2 as parameter + also all additionaly parameters entered. There are API's available to perform above searches on the 2 datasources. Is this a reasonable approach? Would it be better to create somekind of a simple datawarehouse, eg a table with all numbers linked to all documents they appear in? (would't know how to achievie this actually since it's the 2 datasoruces are not the same rdbms).
I've created a photo database and search engine that creates a xml that corresponds to the multiscale image xml.My problem is how to enable multi users to search at the same time?
I have a page which gives user to generate report based on different filters selected. my thoughts Loop through each filter control (checkbox, multi select list, radiobox list) and build dynamic where conditions and conjunctions for each filter and then run query Get all the data (i think this will causes an overload with all 4-5 tables joined) and then use Linq to filter this data based on user selection Is there a better way to implement this?
Anyone have any tips for more advanced books regarding report design? The topics I'm interested in is customizing reports and custom code (i.e let's say I want to preserve chart colors across multiple charts in a report).
I'm using update panel in the master page. Half of my web page will retreive the data from the database in dynamic. As, my update panel is in master page(with ajax loader), it is taking much time for every event. Is there any other advanced method to get the data from the database instead of using update panel.
I've just had Visual Studio 2008 Pro installed by my systems people a few days ago. I'm working through VB.Net For Dummies to refamiliarize myself with it, as it has been a long time since I took a .NET course (2003ish)
I'm not sure if I've done something wrong in the install or what's going on, but in the book it tells me to drag a calendar control to the Web Form page. The screen shot shows it displayed beneath the "Standard" option in the toolbox.
However, the only option I have in my toolbox is "HTML" and it's just got the very most basic HTML controls, like text box and button, etc. I tried "Show All" and then I see Standard, but everything is greyed out.
How do I get the rest of the advanced controls available in ASP.NET? Is it part of the initial setup and was maybe missed by the systems people? Or is there something I need to do to make them available?
I am especially interested in the Calendar control (or any control similar to DatePicker in Windows Forms) as I'm going to have to use that in my real application that I'm gearing up to build.