#queryresponse
Explore tagged Tumblr posts
Text






DidYouKnow
Amazing Facts About Database Optimization 📈
Swipe left to explore!
#didyouknowfacts#knowledgedrop#interestingfacts#factoftheday#learnsomethingneweveryday#mindblown#databaseoptimization#queryresponse#dataperformance#datapartitioning#didyouknowthat#triviatime#makingitsimple#learnsomethingnew#learnsomethingnewtoday#knowledgesharing#knowledgechallenge
0 notes
Text
Salesforce BizTalk Integration - Allied Consultants
In this blog, we will cover how to integrate any system with Salesforce (Salesforce CRM) using Microsoft BizTalk Server. This post includes a very simple scenario, get top 10 accounts from Salesforce. It will respond back with an XML and then you can tweak that XML as per your requirements.
Steps include to accomplish that scenario:
Create BizTalk project.
Import WSDL from Salesforce
Create helper class library
Create a login() request with valid Username and Password – Login Orchestration
Use SessionId and ServerUrl to call another API (in our case it will be a query()) to get data from Salesforce.
Create query() request – QueryProcessOrchestration
Submit that request to Salesforce Url.
Get back a response containing data.
Salesforce provides enterprise WSDL. If you have admin rights you can download it or please request Salesforce admin to download it for you.
Before moving any further, to clear concept how the web calls should be done we usually prefers to test those calls using SoapUI. You can find that in another blog post @
http://www.alliedc.com/sales-force-integration/
Let’s jump into Salesforce integration using BizTalk.
Import WSDL from Salesforce
Create an empty BizTalk project in Visual studio and import Salesforce WSDL in that project using the Web Service Consuming Wizard.
Once you have successfully imported that WSDL in your project you should be able to see imported objects as shown above.
After that go to SforceService_enterprise_soap_sforce_com.xsd schema and mark SessionId and ServerUrl for login response as promoted properties. We will be using these properties in our future steps to get those values from the response.
Create Login Orchestration – for request login data
This orchestration will be used to retrieve the session info after login. We will call this orchestration from another orchestration.
Add a new orchestration and name it Login.odx.
Fill login request from an embedded resource file.
Add a newly configured port in the orchestration and name it SalesForceLoginPort. Select the existing port type – SaleforceIntegration.Sample.Soap type.
Keep port direction as – “I’ll be sending a request and receiving a response”. And select “Specify Later” as port binding.
We will import SforceService.BindingInfo.XML later imported in our BizTalk Application to create the physical ports.
Add two messages of multi-part message types
loginRequest – login object from XSD
loginResponse – login response object from XSD
Define two variables in orchestration parameter with OUT property, SessionId, and ServerUrl.
Add Other shapes like below to complete the orchestration and configure them.
Construct msgLoginRequest as below (need to create a class library SalesforceSample.Helper.MessageHelper, referred below):
Orchestration parameters:
Expression to fill in SessionId and ServerUrl:
Create helper class library
A BizTalkHelper class is used to create various types of the message as XmlDocument. Method “CreateLoginRequestMessage” in this class reads the xml body from the XML template file added as an embedded resource in the project and then populates the placeholders for username and password and returns this XmlDocument.
Create Query Orchestration to Query Account data
This orchestration will be used to retrieve the Account information as XML. Id and Name of Accounts from Salesforce using login orchestration within. Add a new orchestration and name it ProcessAccountsQuery.odx.
Receive an XML message to activate this orchestration. Add a receive location to bind with it.
Add a newly configured port in the orchestration and name it SalesforceQueryPort. Select the existing port type – SaleforceIntegration.Sample.Soap type. Make this port dynamic. You will be sending a request and will receive a response from this port.
Add another send port to send query response message as an XML to any location on your local.
Add two messages of multi-part message types
QueryRequest – query request object from xsd
QueryResponse – query response object from xsd
Define two variables in the orchestration of type string, SessionId, and ServerUrl.
Call login orchestration from this orchestration and fill SessionId and ServeUrl
Add Other shapes like below to complete the orchestration and configure them
Construct query message as below:
msgQuery.parameters = SalesforceSample.Helper.MessagesHelper.CreateQueryRequestMessage();
msgQuery(WCF.OutboundCustomHeaders) = SalesforceSample.Helper.MessagesHelper.CreateTemplateHeaderMessage(SessionId);
SalesforceQueryPort(Microsoft.XLANGs.BaseTypes.Address) = ServerUrl;
SalesforceQueryPort(Microsoft.XLANGs.BaseTypes.TransportType) = “WCF-BasicHttp”;
msgQuery(WCF.SecurityMode) = “Transport”;
msgQuery(WCF.TransportClientCredentialType) = “None”;
msgQuery(WCF.Action) = “”;
You can send that query message to query() operation and then can receive query response. Once you have that query response you can utilize it as per your requirements or you can send that response as an xml file via send port to your local folder.
Conclusion:
In the same way, you can use any Salesforce API using the above-mentioned method. For more Salesforce soap API sample please visit Salesforce developer blog. You just need to modify those sample as per your requirement to test and validate them.
Author: Jahanzaib khan
Senior Integration Consultant
Original Article: http://www.alliedc.com/salesforce-biztalk-integration/
#Integration#BizTalk#XML#enterprise integration#Salesforce Integration#Salesforce#SOQL#SoapUI#Microsoft BizTalk Server#Salesforce BizTalk Integration#Salesforce Integration using BizTalk
0 notes
Text
Making Child Documents Working with Spring-data-solr
Via http://ift.tt/2nhFF90
The Problem We use spring-data-solr in our project - as we like its conversion feature which can convert string to enum, entity to json data and etc, and vice versa, and recently we need use Solr's nested documents feature which spring-data-solr doesn't support. Issues in Spring-data-solr SolrInputDocument class contains a Map _fields AND List _childDocuments.
Spring-data-solr converts java entity class to SolrDocument. It provides two converters: MappingSolrConverter and SolrJConverter. MappingSolrConverter converts the entity to a Map: MappingSolrConverter.write(Object, Map, SolrPersistentEntity) SolrJConverter uses solr's DocumentObjectBinder to convert entity to SolrInputDocument, it will convert field that is annotated with @Field(child = true) to child documents. - This also means that spring-data-solt's convert features will not work with SolrJConverter BUT SolrJConverter still just thinks SolrInputDocument is a map and add all into the destination: Map sink - SolrJConverter.write(Object, Map) After this, the child documents is discarded. The Fix We still want to use spring-data-solr's conversion functions - partly because we don't want to rewrite everything to use SolrJ directly. So when save to solr: we uses spring-data-solr's MappingSolrConverter to convert parent entity as solrInputDocument, then convert child entities as solrInputDocuments and add them into parent's solrInputDocument. When read from solr, we read the SolrDocument as parent entity, then read its child documents as child entities and add them into parent entity.
public class ParentEntity { @Field(child = true) private List<ChildEntity> children; } @Autowired protected SolrClient solrClient; // we add our own converters into MappingSolrConverter // for more, please check // http://ift.tt/1Uq7cPj @Autowired protected MyMappingSolrConverter solrConverter; public void save(@Nonnull final ParentEntity parentEntity) { final SolrInputDocument solrInputDocument = solrConverter.createAndWrite(parentEntity); daddChildDocuemnts(parentEntity, solrInputDocument); try { solrClient.add(getCollection(), solrInputDocument); solrClient.commit(getCollection()); } catch (SolrServerException | IOException e) { throw new BusinessException(e, "failed to save " + parentEntity); } } protected void daddChildDocuemnts(@Nonnull final ParentEntity parentEntity, @Nonnull final SolrInputDocument solrInputDocument) { solrInputDocument.addChildDocuments(parentEntity.getChildren().stream() .map(child -> solrConverter.createAndWrite(child)).collect(Collectors.toList())); } public List<T> querySolr(final SolrParams query) { try { final QueryResponse response = solrClient.query(getCollection(), query); return convertFromSolrDocs(response.getResults()); } catch (final Exception e) { throw new BusinessException("data retrieve failed." + query); } } /* * Also return child documents in solr response as ChildEntity if it exists */ protected List<ParentEntity> convertFromSolrDocs(final SolrDocumentList docList) { List<ParentEntity> result = new ArrayList<>(); if (docList != null) { result = docList.stream().map(solrDoc -> { final ParentEntity parentEntity = solrConverter.read(ParentEntity.class, solrDoc); final List<SolrDocument> childDocs = solrDoc.getChildDocuments(); if (childDocs != null) { ParentEntity.setChildren( childDocs.stream().map(childSolrDoc -> solrConverter.read(ChildEntity.class, solrDoc)) .collect(Collectors.toList())); } return parentEntity; }).collect(Collectors.toList()); } return result; }
Related Mix Spring Data Solr and SolrJ in Solr Cloud 5 SolrJ: Support Converter and make it easier to extend DocumentObjectBinder
From lifelongprogrammer.blogspot.com
0 notes
Photo

Refer to the under given link for details https://www.indasonline.com/QueryResponse/Response.html/FAQAS/720a5602-80d1-43ed-81bc-bfbbee43b9a9/fe1174c2-7cd3-41af-b8d5-95a543605d88/c8325fa7-86cf-4e6b-96bf-07c9917f94ab #indas #rhapsodyindia #faq
0 notes
Link
From http://ift.tt/1ajReyV
The Problem We use spring-data-solr in our project - as we like its conversion feature which can convert string to enum, entity to json data and etc, and vice versa, and recently we need use Solr's nested documents feature which spring-data-solr doesn't support. Issues in Spring-data-solr SolrInputDocument class contains a Map _fields AND List _childDocuments.
Spring-data-solr converts java entity class to SolrDocument. It provides two converters: MappingSolrConverter and SolrJConverter. MappingSolrConverter converts the entity to a Map: MappingSolrConverter.write(Object, Map, SolrPersistentEntity) SolrJConverter uses solr's DocumentObjectBinder to convert entity to SolrInputDocument, it will convert field that is annotated with @Field(child = true) to child documents. - This also means that spring-data-solt's convert features will not work with SolrJConverter BUT SolrJConverter still just thinks SolrInputDocument is a map and add all into the destination: Map sink - SolrJConverter.write(Object, Map) After this, the child documents is discarded. The Fix We still want to use spring-data-solr's conversion functions - partly because we don't want to rewrite everything to use SolrJ directly. So when save to solr: we uses spring-data-solr's MappingSolrConverter to convert parent entity as solrInputDocument, then convert child entities as solrInputDocuments and add them into parent's solrInputDocument. When read from solr, we read the SolrDocument as parent entity, then read its child documents as child entities and add them into parent entity.
public class ParentEntity { @Field(child = true) private List<ChildEntity> children; } @Autowired protected SolrClient solrClient; // we add our own converters into MappingSolrConverter // for more, please check // http://ift.tt/1Uq7cPj @Autowired protected MyMappingSolrConverter solrConverter; public void save(@Nonnull final ParentEntity parentEntity) { final SolrInputDocument solrInputDocument = solrConverter.createAndWrite(parentEntity); daddChildDocuemnts(parentEntity, solrInputDocument); try { solrClient.add(getCollection(), solrInputDocument); solrClient.commit(getCollection()); } catch (SolrServerException | IOException e) { throw new BusinessException(e, "failed to save " + parentEntity); } } protected void daddChildDocuemnts(@Nonnull final ParentEntity parentEntity, @Nonnull final SolrInputDocument solrInputDocument) { solrInputDocument.addChildDocuments(parentEntity.getChildren().stream() .map(child -> solrConverter.createAndWrite(child)).collect(Collectors.toList())); } public List<T> querySolr(final SolrParams query) { try { final QueryResponse response = solrClient.query(getCollection(), query); return convertFromSolrDocs(response.getResults()); } catch (final Exception e) { throw new BusinessException("data retrieve failed." + query); } } /* * Also return child documents in solr response as ChildEntity if it exists */ protected List<ParentEntity> convertFromSolrDocs(final SolrDocumentList docList) { List<ParentEntity> result = new ArrayList<>(); if (docList != null) { result = docList.stream().map(solrDoc -> { final ParentEntity parentEntity = solrConverter.read(ParentEntity.class, solrDoc); final List<SolrDocument> childDocs = solrDoc.getChildDocuments(); if (childDocs != null) { ParentEntity.setChildren( childDocs.stream().map(childSolrDoc -> solrConverter.read(ChildEntity.class, solrDoc)) .collect(Collectors.toList())); } return parentEntity; }).collect(Collectors.toList()); } return result; }
Related Mix Spring Data Solr and SolrJ in Solr Cloud 5 SolrJ: Support Converter and make it easier to extend DocumentObjectBinder
0 notes
Text
Java APIs to Build Solr Suggester and Get Suggestion
Via http://ift.tt/2iJvxV0
User Case Usually we provide Rest APIs to manage Solr, same for suggestor. This article focuses on how to programmatically build Solr suggester and get suggestions using java code. The implementation Please check the end of the article for Solr configuration files. Build Suggester In Solr, after we add docs to Solr, we call suggest?suggest.build=true to build the suggestor to make them available for autocompletion. The only trick here is the suggest.build request doesn't build suggester for all cores in the collection, BUT only builds suggester to the core that receives the request. We need get all replicas urls of the collection, add them into shards parameter, and also add shards.qt=/suggest: shards=127.0.0.1:4567/solr/myCollection_shard1_replica3,127.0.0.1:4565/solr/myCollection_shard1_replica2,127.0.0.1:4566/solr/myCollection_shard1_replica1,127.0.0.1:4567/solr/myCollection_shard2_replica3,127.0.0.1:4566/solr/myCollection_shard2_replica1/,127.0.0.1:4565/solr/myCollection_shard2_replica2&shards.qt=/suggest
public void buildSuggester() { final SolrQuery solrQuery = new SolrQuery(); final List<String> urls = getAllSolrCoreUrls(getSolrClient()); solrQuery.setRequestHandler("/suggest").setParam("suggest.build", "true") .setParam(ShardParams.SHARDS, COMMA_JOINER.join(urls)) .setParam(ShardParams.SHARDS_QT, "/suggest"); try { final QueryResponse queryResponse = getSolrClient().query(solrQuery); final int status = queryResponse.getStatus(); if (status >= 300) { throw new BusinessException(ErrorCode.data_access_error, MessageFormat.format("Failed to build suggestions: status: {0}", status)); } } catch (SolrServerException | IOException e) { throw new BusinessException(ErrorCode.data_access_error, e, "Failed to build suggestions"); } } public static List<String> getAllSolrCoreUrls(final CloudSolrClient solrClient) { final ZkStateReader zkReader = getZKReader(solrClient); final ClusterState clusterState = zkReader.getClusterState(); final Collection<Slice> slices = clusterState.getSlices(solrClient.getDefaultCollection()); if (slices.isEmpty()) { throw new BusinessException(ErrorCode.data_access_error, "No slices"); } return slices.stream().map(slice -> slice.getReplicas()).flatMap(replicas -> replicas.stream()) .map(replica -> replica.getCoreUrl()).collect(Collectors.toList()); } private static ZkStateReader getZKReader(final CloudSolrClient solrClient) { final ZkStateReader zkReader = solrClient.getZkStateReader(); if (zkReader == null) { // This only happens when we first time call solrClient to do anything // Usually we will call solrClient to do something during abolition starts: such as // healthCheck, so in most cases, its already connected. solrClient.connect(); } return solrClient.getZkStateReader(); }
Get Suggestions
public Set<SearchSuggestion> getSuggestions(final String prefix, final int limit) { final Set<SearchSuggestion> result = new LinkedHashSet<>(limit); try { final SolrQuery solrQuery = new SolrQuery().setRequestHandler("/suggest").setParam("suggest.q", prefix) .setParam("suggest.count", String.valueOf(limit)).setParam(CommonParams.TIME_ALLOWED, mergedConfig.getConfigByNameAsString("search.suggestions.time_allowed.millSeconds")); // context filters solrQuery.setParam("suggest.cfq", getContextFilters()); final QueryResponse queryResponse = getSolrClient().query(solrQuery); if (queryResponse != null) { final SuggesterResponse suggesterResponse = queryResponse.getSuggesterResponse(); final Map<String, List<Suggestion>> map = suggesterResponse.getSuggestions(); final List<Suggestion> infixSuggesters = map.get("infixSuggester"); if (infixSuggesters != null) { for (final Suggestion suggester : infixSuggesters) { if (result.size() < limit) { result.add(new SearchSuggestion().setText(suggester.getTerm()) .setHighlightedText(replaceTagB(suggester.getTerm()))); } else { break; } } } } logger.info( MessageFormat.format("User: {0}, query: {1}, limit: {2}, result: {3}", user, query, limit, result)); return result; } catch (final Exception e) { throw new BusinessException(ErrorCode.data_access_error, e, "Failed to get suggestions for " + query); } } private static final Pattern TAGB_PATTERN = Pattern.compile("<b>|</b>"); public static String replaceTagB(String input) { return TAGB_PATTERN.matcher(input).replaceAll(""); }
Schema.xml We define textSuggest and suggesterContextField, copy fields which are shown in the autocompletion to textSuggest field, and copy filter fields such as zipCodes, genres to suggesterContextField. Solr suggester supports filters on multiple fields, all we just need copy all these filter fields to suggesterContextField.
<field name="suggester" type="textSuggest" indexed="true" stored="true" multiValued="true" /> <field name="suggesterContextField" type="string" indexed="true" stored="true" multiValued="true" /> <copyField source="seriesTitle" dest="suggester" /> <copyField source="programTitle" dest="suggester" /> <copyField source="zipCodes" dest="suggesterContextField" /> <copyField source="genres" dest="suggesterContextField" />
SolrConfig.xml We can add multiple suggester implementations to searchComponent. Another very useful is FileDictionaryFactory which allows us to using an external file that contains suggest entries. We may use it in future.
<searchComponent name="suggest" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name">infixSuggester</str> <str name="lookupImpl">BlendedInfixLookupFactory</str> <str name="dictionaryImpl">DocumentDictionaryFactory</str> <str name="blenderType">position_linear</str> <str name="field">suggester</str> <str name="contextField">suggesterContextField</str> <str name="minPrefixChars">4</str> <str name="suggestAnalyzerFieldType">textSuggest</str> <str name="indexPath">infix_suggestions</str> <str name="highlight">true</str> <str name="buildOnStartup">false</str> <str name="buildOnCommit">false</str> </lst> </searchComponent> <requestHandler name="/suggest" class="solr.SearchHandler" > <lst name="defaults"> <str name="suggest">true</str> <str name="suggest.dictionary">infixSuggester</str> <str name="suggest.onlyMorePopular">true</str> <str name="suggest.count">10</str> <str name="suggest.collate">true</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler>
Resources Solr Suggester
From lifelongprogrammer.blogspot.com
0 notes
Link
From http://ift.tt/1ajReyV
User Case Usually we provide Rest APIs to manage Solr, same for suggestor. This article focuses on how to programmatically build Solr suggester and get suggestions using java code. The implementation Please check the end of the article for Solr configuration files. Build Suggester In Solr, after we add docs to Solr, we call suggest?suggest.build=true to build the suggestor to make them available for autocompletion. The only trick here is the suggest.build request doesn't build suggester for all cores in the collection, BUT only builds suggester to the core that receives the request. We need get all replicas urls of the collection, add them into shards parameter, and also add shards.qt=/suggest: shards=127.0.0.1:4567/solr/myCollection_shard1_replica3,127.0.0.1:4565/solr/myCollection_shard1_replica2,127.0.0.1:4566/solr/myCollection_shard1_replica1,127.0.0.1:4567/solr/myCollection_shard2_replica3,127.0.0.1:4566/solr/myCollection_shard2_replica1/,127.0.0.1:4565/solr/myCollection_shard2_replica2&shards.qt=/suggest
public void buildSuggester() { final SolrQuery solrQuery = new SolrQuery(); final List<String> urls = getAllSolrCoreUrls(getSolrClient()); solrQuery.setRequestHandler("/suggest").setParam("suggest.build", "true") .setParam(ShardParams.SHARDS, COMMA_JOINER.join(urls)) .setParam(ShardParams.SHARDS_QT, "/suggest"); try { final QueryResponse queryResponse = getSolrClient().query(solrQuery); final int status = queryResponse.getStatus(); if (status >= 300) { throw new BusinessException(ErrorCode.data_access_error, MessageFormat.format("Failed to build suggestions: status: {0}", status)); } } catch (SolrServerException | IOException e) { throw new BusinessException(ErrorCode.data_access_error, e, "Failed to build suggestions"); } } public static List<String> getAllSolrCoreUrls(final CloudSolrClient solrClient) { final ZkStateReader zkReader = getZKReader(solrClient); final ClusterState clusterState = zkReader.getClusterState(); final Collection<Slice> slices = clusterState.getSlices(solrClient.getDefaultCollection()); if (slices.isEmpty()) { throw new BusinessException(ErrorCode.data_access_error, "No slices"); } return slices.stream().map(slice -> slice.getReplicas()).flatMap(replicas -> replicas.stream()) .map(replica -> replica.getCoreUrl()).collect(Collectors.toList()); } private static ZkStateReader getZKReader(final CloudSolrClient solrClient) { final ZkStateReader zkReader = solrClient.getZkStateReader(); if (zkReader == null) { // This only happens when we first time call solrClient to do anything // Usually we will call solrClient to do something during abolition starts: such as // healthCheck, so in most cases, its already connected. solrClient.connect(); } return solrClient.getZkStateReader(); }
Get Suggestions
public Set<SearchSuggestion> getSuggestions(final String prefix, final int limit) { final Set<SearchSuggestion> result = new LinkedHashSet<>(limit); try { final SolrQuery solrQuery = new SolrQuery().setRequestHandler("/suggest").setParam("suggest.q", prefix) .setParam("suggest.count", String.valueOf(limit)).setParam(CommonParams.TIME_ALLOWED, mergedConfig.getConfigByNameAsString("search.suggestions.time_allowed.millSeconds")); // context filters solrQuery.setParam("suggest.cfq", getContextFilters()); final QueryResponse queryResponse = getSolrClient().query(solrQuery); if (queryResponse != null) { final SuggesterResponse suggesterResponse = queryResponse.getSuggesterResponse(); final Map<String, List<Suggestion>> map = suggesterResponse.getSuggestions(); final List<Suggestion> infixSuggesters = map.get("infixSuggester"); if (infixSuggesters != null) { for (final Suggestion suggester : infixSuggesters) { if (result.size() < limit) { result.add(new SearchSuggestion().setText(suggester.getTerm()) .setHighlightedText(replaceTagB(suggester.getTerm()))); } else { break; } } } } logger.info( MessageFormat.format("User: {0}, query: {1}, limit: {2}, result: {3}", user, query, limit, result)); return result; } catch (final Exception e) { throw new BusinessException(ErrorCode.data_access_error, e, "Failed to get suggestions for " + query); } } private static final Pattern TAGB_PATTERN = Pattern.compile("<b>|</b>"); public static String replaceTagB(String input) { return TAGB_PATTERN.matcher(input).replaceAll(""); }
Schema.xml We define textSuggest and suggesterContextField, copy fields which are shown in the autocompletion to textSuggest field, and copy filter fields such as zipCodes, genres to suggesterContextField. Solr suggester supports filters on multiple fields, all we just need copy all these filter fields to suggesterContextField.
<field name="suggester" type="textSuggest" indexed="true" stored="true" multiValued="true" /> <field name="suggesterContextField" type="string" indexed="true" stored="true" multiValued="true" /> <copyField source="seriesTitle" dest="suggester" /> <copyField source="programTitle" dest="suggester" /> <copyField source="zipCodes" dest="suggesterContextField" /> <copyField source="genres" dest="suggesterContextField" />
SolrConfig.xml We can add multiple suggester implementations to searchComponent. Another very useful is FileDictionaryFactory which allows us to using an external file that contains suggest entries. We may use it in future.
<searchComponent name="suggest" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name">infixSuggester</str> <str name="lookupImpl">BlendedInfixLookupFactory</str> <str name="dictionaryImpl">DocumentDictionaryFactory</str> <str name="blenderType">position_linear</str> <str name="field">suggester</str> <str name="contextField">suggesterContextField</str> <str name="minPrefixChars">4</str> <str name="suggestAnalyzerFieldType">textSuggest</str> <str name="indexPath">infix_suggestions</str> <str name="highlight">true</str> <str name="buildOnStartup">false</str> <str name="buildOnCommit">false</str> </lst> </searchComponent> <requestHandler name="/suggest" class="solr.SearchHandler" > <lst name="defaults"> <str name="suggest">true</str> <str name="suggest.dictionary">infixSuggester</str> <str name="suggest.onlyMorePopular">true</str> <str name="suggest.count">10</str> <str name="suggest.collate">true</str> </lst> <arr name="components"> <str>suggest</str> </arr> </requestHandler>
Resources Solr Suggester
0 notes