Edits: cleaning and added a function under the EntityClassList section to search for classes.
I will add stuff here as I learn to use entities.
Outline
Practical theoretical guide to entities
Again, I am still learning so it will be basic.
The entity framework seems to follow a hierarchy. The following lists layers of decreasing levels of abstraction. That is, the list starts with broad categories and ends with more concrete objects.
There are many entity types that encompass broad categories.
Examples :
Country
ExoPlanet
Movie
Chemical
For more examples there is the guide of entity types in the documentation with a categorized list of types. One may also just type Entity[" or EntityClassList[" or EntityClass[" and a list of entity types will appear as suggestions.
As an example, consider the type : "Chemical"
Next we type :
EntityClassList["Chemical"]
A list of entity classes appear. Each class is an abstract object that represents a category or set of entities. For the chemical type here is an extract:
Notice these are still broad terms. No H2O or Zinc or anything specific. Just groups that can contain other stuff.
Edit
To search in an entity class list one may use the function below:
Note: ⎵=\[UnderBracket]
search⎵type[type_, query_] :=
Quiet@Cases[EntityClassList[type],
EntityClass[type, _?(StringMatchQ[#, "*" <> query <> "*"] &)]]
Example:
search⎵type["MathematicalFunction", "Int"]

Ok let's pick an entity class:
"alloys"
or in the wolfram syntax:
EntityClass["Chemical", "Alloys"]
which appears as

that one reads as the alloys class with type chemicals
Ok so what is in the alloys entity class ?
EntityList[EntityClass["Chemical", "Alloys"]] (* looks nicer in a notebook *)
Output:

Each element of that list is an entity. The resource function EntityToolTip allows one to see information about each entity by hovering (it does not seem to work on entity classes). Maybe see also InformationPopup but I only recently saw that and have not yet tried it.
Finally we reached to the main object of interest. I am a beginner so I am not sure what all we can do with these objects. What you can do is use ??entity, entity["Properties"] and EntityValue[entity,"Dataset"] to gain information from an entity.
example:



Practical stuff that require minimal understanding of entities
Free form syntax and wolfram alpha are your friends and seem to be recommended in the documentation for entities even to search for a specific entity. I am not an expert on free form syntax but it often works well with entities when asking simple direct requests. The sections that follow are in the event that:
We do not know what we want yet, just strolling/ window shopping
We are lost with too many entities or possible interpretations
What we want is long, complex and specific and free form syntax, wolfram alpha and the wolfram data repository did not work.
List all possibly related interpretations
SemanticInterpretation["thing you want to search for ", AmbiguityFunction -> All]
lists all possible interpretations of a string. However, the list of interpretations seem to be the same as in free form syntax (with three dots on the right when there are alternative interpretations). The documentation
also if in the middle of a search and you find an entity class object, you can list all of the entities it contains with EntityList.
Specification/Clarification
For clarifying what you want : ("I want the location of the eiffel tower")
Interpreter["Location"]["eiffel tower"]
For the list of possible specifications of what we could mean see the documentation.
Filtering
For filtering entities: SemanticInterpretation and FilteredEntityClass. A quick introduction to FilteredEntityClass here
Quickly view the information content of an entity
EntityToolTip is a resource function that allows you to see information about an entity in a large list by just hovering (instead of having to evaluate ??entity in a separate cell for each entity).
The related resources suggestion InformationPopup might be a more general alternative as it displays information about a symbol by just selecting it also without having to evaluate ??symbol (I just saw it I have not tried it yet).