I am new to CMS search abilities and Azure search. I am looking at CMS options and was looking at Orchard Core CMS and saw it had Lucene search and GraphQL for searching via Headless CMS implementation as well. I also see Azure search services out in Azure. I am confused on if I should simply use the built-in search Orchard Core CMS already has or if Azure search is much better and what it can offer me. Clueless here....
Orchard Core as of now uses Lucene directly. The only drawback of using Lucene directly is that it doesn't scale as well as an Azure Search for example which is a distributed service.
The Lucene implementation in OC has been inspired by ElasticSearch. You can create Lucene Queries which are using quite the same syntax as ElasticSearch Queries. In fact we try to use the ElasticSearch documentation to replicate as much as we can the same Query syntax.
Right now the plan is to eventually support Reddis + ElasticSearch as distributed services but I've heard nothing about Azure Search. Remember that ElasticSearch is probably a little more polyvalent as it can also be installed on premise.
Related
I'm building a simple web application that will list/search retail items for sale.
design is like this ...
MySQL database -> Elastic Search deployment -> Spring Boot REST service -> Web UI (JSP/Bootstrap or Angular)
I am planning to write Java client code to read the database and post records to Elastic Search for indexing.
Googling, it looks like Logstash is used for this sort of thing. I'm not familiar with Logstash, I am very familiar with Java.
QUESTION: Is Java client considered a "deprecated" or "legacy" way to submit data to Elastic Search for indexing?
I'm very familiar with Java, should I use Java or Logstash?
Adding to #chris answer, logstash will add complexity and another Infrastructure to maintain in your stack, and logstash is known for getting stuck and is not as resilient as Elasticsearch is.
You are already using Java for your application code and btw elasticsearch now officially has a java client known as java high-level rest client(JHLRC) , which is very popular and provides an exhaustive list of APIs for indexing/searching and building a modern search system.
IMHO you should use the JHLRC,
which will save you to the pain points of logstash
you don't have to learn another tool
simple infrastructure
simple deployment
last but not least simple and easy to maintain codebase.
Logstash is good tool to be used to migrate the data from many sources to elastic search. It's build in java language only.
You can use Logstash. It also has options to mutate the data or filter the data. Its a ready to use to tool which will save lot of your development time and efforts.
But if you have a requirement for lot of customisation and need lot of control over your data before pushing it to elastic search then you can build your own application for the same.
Coming back to your question..java is not deprecated for indexing data to elastic search. It is still a preferred option.
Both Neo4j 4.0 and elasticsearch have full text seach and inverted index with apache lucene.
So how elastic search is better than neo4j full text search?
Consider that we are dealing with the knowledge graph as a data storage model developed in Neo4j.
Apart from that why should we use elasticsearch with Neo4j 4.0. what are things that elasticsearch offer but not neo4j 4.0
So how elastic search is better than neo4j full text search?
"Better" is largely dependent on your use case. But the tools (Neo4j and ElasticSearch) were built for drastically different purposes.
Neo4j is best when used as a graph-traversal engine, returning data from edge (relationship) based queries. It might have similar capabilities, but it just wasn't meant to be used as a search engine.
Want things like "fuzzy" matching and relevance ranking? Neo4j is not going to do any of that. Also, ElasticSearch is a true out-of-the-box distributed datastore. Neo4j can't distribute without an enterprise license.
Basically, it comes down to business requirements. If a datastore mainly needs to execute graph traversals, and serve some simple search-like requests, Neo4j might be enough on its own. Need a full-featured search engine to serve that same data? ElasticSearch is the better suited to handle that.
We have a custom entity in Liferay called 'Publication'. It is indexed in Elastic-search and contains a field named 'journalArticleId'.
Based on our search requirements if some user searches for any keyword in the journal article we have to return the publication document which contains the 'journalArticleId' of the respective journal.
I found the solution for implementing this using Java API but I'm looking for the Liferay API to solve this.
Elastic Search Parent-Child Data Search Java API
Thanks in advance for any response.
for the extension of existing indexers you should try to implement an indexer post processor hook ... instead of actually overriding them with an ext plugin
link for 6.2
https://dev.liferay.com/de/develop/tutorials/-/knowledge_base/6-2/extending-the-indexer-post-processor-using-a-hook
link for 7 aka dxp
https://dev.liferay.com/de/develop/reference/-/knowledge_base/7-0/indexer-post-processor
You should be able to find documentation for overriding an indexer. It sounds like you could just extend the existing Journal Indexer: Just add the additional Publication data to the full text index for the existing Journal article and it will be found automatically.
Edit (after your comment): Without looking it up, I assume that Liferay's encapsulation of the API does not really cater for parent-child relationships (but: I might be wrong, it might be in or easy). However, Liferay also allows you to exchange Elasticsearch with SOLR (and potentially others) so its API naturally doesn't use all of the features of the underlying search engines. However, you should always be able to make the extra calls yourself - probably not in the indexer but closer to the ES adapter.
The solution might be: Prepare the content in the Indexer and separate it into parent and child later, in the Elasticsearch adapter.
The elastic search provides features for parent-child mapping and the solution for the above situation can be implemented using Java API.
Elastic Search Parent-Child Data Search Java API
We have contacted the Liferay support team and they responded that the Liferay-elasticsearch adapter doesn't support this feature yet.
version : liferay-dxp-digital-enterprise-7.0-sp3
I understand that generally speaking Elastic search is better to use in most cases but i would like to know specifically for Umbraco, whether it is as good to use or not? Or if lucene is better
I've not use elastic search before, but I use Umbraco a lot and I use lucene, mainly via Examine which uses lucene.
Read about Examine here https://our.umbraco.org/documentation/reference/searching/examine/
See an example of some advanced search I set up in Umbraco using Examine here
http://www.codeshare.co.uk/blog/how-to-search-by-document-type-and-property-in-umbraco/
We are developing a search engine application in Life Ray 7 and Elastic-Search(2.2). I’ve gone through the official documentation of Life-ray 7 API’ for elastic search but it only describes some classes we need to use and very confusing. We are not using elastic search native API and Transport client.
How to connect to EL from Life-ray? (We have gone through this official link )
How to use life-ray 7 API for indexing and searching in Elastic search?( The official doc only mentions some classes for doing this. We can't find a doc to see how to use them, even Javadoc contains nothing)
I really appreciate if someone can provide us a link to a proper tutorial or an example of how to index a document (for ex: a profile object) in Elastic search on localhost.
We are completely new to the Liferay and elastic search, pardon me for any mistake. Also, we know how to develop the above logics using Native API of elastic search and Java Transport Client.
How to connect to EL from Life-ray?
This link describes the step-by-step process required to setup Liferay with Elastic search.
How to use life-ray 7 API for indexing and searching in Elastic search?
The API's for search/indexing in Liferay 7.0 hasn't changed much. So, I would suggest referring to this link.
I personally haven't implemented Elastic Search in the past as I have used only GSA in my experience. However, I'm pretty sure this documentation is sufficient to get started.