{
    "componentChunkName": "component---src-templates-article-page-template-js",
    "path": "/concepts/how-the-listing-search-works/",
    "result": {"data":{"markdownRemark":{"frontmatter":{"title":"How the listing search works","slug":"how-the-listing-search-works","updated":"2019-07-17T00:00:00.000Z","category":"concepts-listings","ingress":"Listings search can be crucial for your marketplace to thrive. Providing people with the right kind of search parameters and filters will help the users to easily find listings relevant to their needs.","skills":null},"htmlAst":{"type":"root","children":[{"type":"element","tagName":"h2","properties":{"id":"listings-search-in-flex","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#listings-search-in-flex","ariaLabel":"listings search in flex permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Listings search in Flex"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In Flex, listings are searched by using the\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.sharetribe.com/api-reference/marketplace.html#query-listings","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"/listings/query"}]},{"type":"text","value":"\nendpoint. Flex has a powerful listing search engine, which can find\nlistings based on multiple criteria:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Geolocation."}]},{"type":"text","value":" The search can be used to display only listings that\nare within a provided radius from certain coordinates. Read more about\n"},{"type":"element","tagName":"a","properties":{"href":"#location-search"},"children":[{"type":"text","value":"location search below"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Free text."}]},{"type":"text","value":" The search can be used to find listings that have a\n"},{"type":"element","tagName":"a","properties":{"href":"#keyword-search"},"children":[{"type":"text","value":"certain keyword"}]},{"type":"text","value":" provided by the user. The search\ncan find from listing title and description. You can also choose to\nindex some public data fields (like listing category) so the search\nfinds from them as well."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Price."}]},{"type":"text","value":" It's possible to filter out listings with too high or too\nlow price.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. show only listings between $20 and $100:\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ price: \"2000,10000\" })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Availability."}]},{"type":"text","value":" It's possible to filter out listings that have\ninsufficient availability during a given time range. Works together\nwith seats so that you can filter for availability with minimum number\nof seats. It is also possible to filter by required minimum duration\nof availability for the given time range.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. show only listings available for October 22-29, 2022:\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ availability: \"full\", start: \"Sat Oct 22 2022 01:00:00 GMT+0100\", end: \"Sat Oct 29 2022 01:00:00 GMT+0100\" })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Stock."}]},{"type":"text","value":" It's possible to show all listings or only listings with\npositive stock.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. show only listings with at least one item in stock:\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ minStock: 1 })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Custom filter: any value."}]},{"type":"text","value":" Any number of custom filters can be\nadded. \"Any value\" filters out listings that don't have the given\nvalue (or any of a set of given values) in their public data. A\ntypical use case is filtering by category or subcategory.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. show only listings from public data category 'used':\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ pub_category: \"used\" })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Custom filter: all values"}]},{"type":"text","value":". Filters out listings that don't have\nall values in a given set. A typical use case is choosing among\n\"amenities\": an apartment must have both balcony and floor heating in\ntheir public data to be displayed in the search.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. show only listings that have both balcony and floor heating:\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ pub_amenities: \"has_all:balcony,floorHeating\" })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Custom numeric filter."}]},{"type":"text","value":" Filters out listings that don't have a\ncertain numeric value in their public data. For example, you might\nwant to build a slider filter for the skill level of the user, ranging\nfrom 0 to 10.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. show only listings for user skill levels 4-7:\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ pub_userSkillLevel: \"4,7\" })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Sorting."}]},{"type":"text","value":" Listing sorting order can be customized per query.\nSorting is supported by one or more of: listing price, listing\ncreation time, or any numeric attribute in the listing's public data\nor metadata.\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"e.g. sort listings for user skill level:\n"},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"sdk.listings.query({ ...params, sort: \"pub_userSkillLevel\" })"}]}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This article approaches the search from two different perspectives:\nkeywords and location. See the API\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.sharetribe.com/api-reference/marketplace.html#query-listings","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"reference documentation"}]},{"type":"text","value":"\nfor a full list of search parameters. Do note that for all search\nparameters, you will need to create a\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/manage-search-schemas-with-flex-cli/"},"children":[{"type":"text","value":"search schema"}]},{"type":"text","value":" so that\nthe data is indexed correctly for search."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"keyword-search","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#keyword-search","ariaLabel":"keyword search permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Keyword search"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The keyword search works so that it matches the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"keywords"}]},{"type":"text","value":" parameter to\ntext content of a listing. The listing attributes that are matched in\nkeyword search by default are "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"title"}]},{"type":"text","value":" and "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"description"}]},{"type":"text","value":". Listing public\ndata fields can also be used in the keyword search by defining them to\nhave type "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"text"}]},{"type":"text","value":" in the marketplace's\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/references/extended-data/#search-schema"},"children":[{"type":"text","value":"listing public search schema"}]},{"type":"text","value":".\nAll "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"text"}]},{"type":"text","value":" public data fields with defined schema are indexed for\nkeyword search."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"When the listing text content is indexed, in addition to indexing the\nactual word, it is also broken into subwords, "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"n-grams"}]},{"type":"text","value":". For words\nlonger than 3 characters, n-grams of 3 and more characters are\nconstructed from the beginning and end of the word. So if an indexed\nfield contains the word "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"local"}]},{"type":"text","value":" in addition to the actual word the\nfollowing n-grams are indexed: "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"loc"}]},{"type":"text","value":", "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"loca"}]},{"type":"text","value":", "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"ocal"}]},{"type":"text","value":", and "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"cal"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The search results are sorted so that a match with an actual word from\nthe listing always weighs more than a match with an n-gram. The order in\nwhich matches in different fields of a listing effect the search score\nis the following: "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"title > description > public data fields"}]},{"type":"text","value":". However,\nthe search score differences between the fields are substantially\nsmaller than the difference between a match with an actual word in the\nlisting and an n-gram. Listings that don't match the search keywords at\nall are not included in the results."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"keywords"}]},{"type":"text","value":" parameter is a single string that is tokenized on\nnon-alphanumeric characters. Therefore, passing "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"local attractions"}]},{"type":"text","value":" as a\nvalue for the parameter will conduct a search with two keywords: "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"local"}]},{"type":"text","value":"\nand "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"attractions"}]},{"type":"text","value":" and those are then matched against the listing\ncontent. A listing will be included in the results, in case any of the\nkeywords match."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In order to take the keyword search into use in FTW, see the how-to\nguides on\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/use-keyword-search-in-topbar/"},"children":[{"type":"text","value":"adding keyword search to the top bar"}]},{"type":"text","value":"\nand "},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/how-to/change-search-filters-in-ftw/"},"children":[{"type":"text","value":"modifying filters"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"location-search","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#location-search","ariaLabel":"location search permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Location search"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The listings search provides two parameters to modify the search by\nlocation: "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"origin"}]},{"type":"text","value":" and "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"bounds"}]},{"type":"text","value":". "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"origin"}]},{"type":"text","value":" parameter takes a single\nlocation. It does not limit the results in any way but it sorts the\nresults from closest to the furthest from the given point. The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"origin"}]},{"type":"text","value":"\nparameter can not be combined with "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"keywords"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In order to combine location and keyword search, the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"bounds"}]},{"type":"text","value":" parameter\ncan be used. It takes north-east and south-west corners of a bounding\nbox that limits the returned results to that area. It does not affect\nthe sorting of results. The bounds can then conveniently be used to\nmatch search results to a map view."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"how-about-user-search","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#how-about-user-search","ariaLabel":"how about user search permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"How about user search?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The Flex Marketplace API does not have an endpoint for querying users.\nThis is because listings are modeled as the focus of the marketplace. If\nyou do, however, want to implement a search functionality for users, you\nhave a few options."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"users-as-listings","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#users-as-listings","ariaLabel":"users as listings permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Users as listings"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The FTW-hourly template has modeled\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/introduction/introducing-yogatime/#profiles-as-bookable-listings"},"children":[{"type":"text","value":"providers as listings"}]},{"type":"text","value":"\nby default. This means that the user entity is distinct from the user's\nservice provider entity. You can then use the default listing search to\nquery the service provider profiles with all the query options described\nabove."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"custom-user-search-endpoint-in-the-ftw-server","style":"position:relative;"},"children":[{"type":"element","tagName":"a","properties":{"href":"#custom-user-search-endpoint-in-the-ftw-server","ariaLabel":"custom user search endpoint in the ftw server permalink","className":["anchor","before"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Custom user search endpoint in the FTW server"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The Flex Integration API does have an endpoint for querying users.\nHowever,\n"},{"type":"element","tagName":"a","properties":{"href":"/docs/legacy/concepts/marketplace-api-integration-api/#when-to-use-the-integration-api"},"children":[{"type":"text","value":"using the Integration API safely requires a trusted context"}]},{"type":"text","value":",\nsuch as the FTW application server. In addition, the Integration API\n"},{"type":"element","tagName":"a","properties":{"href":"https://www.sharetribe.com/api-reference/integration.html#query-users","target":"_blank","rel":["noopener","noreferrer"]},"children":[{"type":"text","value":"/users/query"}]},{"type":"text","value":"\nendpoint returns not only public user information but also non-public\ninformation."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This means that if you do want to use the Integration API user query,\nyou need to create a custom server endpoint in the FTW template's server\nthat calls the Integration API endpoint and only returns the user's\npublic information – public data and metadata – back to the browser.\nOtherwise, you risk revealing sensitive user information to everyone who\nvisits your marketplace site."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"That said, the Integration API query has fewer filtering and sorting\noptions than the Marketplace API listing query, so for any level of\ncomplexity in your user search it is recommended to use the \"users as\nlistings\" approach."}]}],"data":{"quirksMode":false}},"headings":[{"value":"Listings search in Flex","depth":2},{"value":"Keyword search","depth":2},{"value":"Location search","depth":2},{"value":"How about user search?","depth":2},{"value":"Users as listings","depth":3},{"value":"Custom user search endpoint in the FTW server","depth":3}]}},"pageContext":{"slug":"how-the-listing-search-works","category":"concepts-listings"}},
    "staticQueryHashes": ["3794076007","439097193","717698143"]}