unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
* Relevance search in Emacs
@ 2020-12-05 18:18 Jean Louis
  2020-12-05 21:06 ` Drew Adams
  2020-12-05 22:22 ` TRS-80
  0 siblings, 2 replies; 6+ messages in thread
From: Jean Louis @ 2020-12-05 18:18 UTC (permalink / raw)
  To: Help GNU Emacs

Before weeks I was discussing and trying to find something that could
replace the `helm' in Emacs, so that I spare using external
libraries. Then discussion with Drew clarified that what I am looking
is rather type of a filter. But I would like to filter by
relevance. Some packages like `ivy' and `helm' do offer relevance
searches. Yet I wish to spare the basic package from using external
functions. This way me or other users can use any completion or Emacs
built-in completion function which is generally more user friendly in
my opinion.

Chapter 12. Full Text Search
https://www.postgresql.org/docs/current/textsearch-intro.html#TEXTSEARCH-MATCHING

What is good is that database PostgreSQL offers built-in relevance
searches and that spares coding and using other packages, so I am
transitioning to minimize usage of helm or take it completely out and
replace it with tabulated-list-mode that will offer options to act on.

I hope to replace the TAB in tabulated-list-mode so that it can offer
screen of various options or completion from minibuffer for actions
that may be invoked on a specific item.

In the manual there is little I can find related to "relevance". If
somebody knows if there is some "relevance" search in Emacs built-in
packages let me know, otherwise I will let database do the job.




^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: Relevance search in Emacs
  2020-12-05 18:18 Relevance search in Emacs Jean Louis
@ 2020-12-05 21:06 ` Drew Adams
  2020-12-05 21:26   ` Jean Louis
  2020-12-05 22:22 ` TRS-80
  1 sibling, 1 reply; 6+ messages in thread
From: Drew Adams @ 2020-12-05 21:06 UTC (permalink / raw)
  To: Jean Louis, Help GNU Emacs

> Chapter 12. Full Text Search
> https://www.postgresql.org/docs/current/textsearch-intro.html*TEXTSEARCH-MATCHING

That's apparently what's often called full-text search,
and which is an indexed search.  The text is indexed
ahead of time, and the index is used for search "lookup".

It means that the text itself is not searched or searchable,
at least by those means, but it could of course be mixed
with a separate pass of actual search of the text (e.g.,
for regexp matching).

Typically words are indexed, along with their positions
(so nearness etc. can be among the search criteria).

> What is good is that database PostgreSQL offers built-in relevance
> searches..
> In the manual there is little I can find related to "relevance".

Which manual?

> If somebody knows if there is some "relevance" search in Emacs built-in
> packages let me know, otherwise I will let database do the job.

"Relevance" can mean anything.  Think of how much can go
into, say, a google search: "relevance" there can include
intimate detail about you as a person, your likes, etc.

Yes, some Emacs 3rd-party libraries do provide "scoring"
of some kinds of searches.  For example, for certain kinds
of fuzzy matching a score can indicate how "closely" a
given candidate is matched by your search pattern.

You'd do well, when looking for answers here or elsewhere,
to specify the kind of relevance you have in mind.

In general, it's up to you who define the search procedure
to define the relevant (!) relevance criteria, or those
that you make available to a user.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Relevance search in Emacs
  2020-12-05 21:06 ` Drew Adams
@ 2020-12-05 21:26   ` Jean Louis
  2020-12-05 21:43     ` Drew Adams
  0 siblings, 1 reply; 6+ messages in thread
From: Jean Louis @ 2020-12-05 21:26 UTC (permalink / raw)
  To: Drew Adams; +Cc: Help GNU Emacs

* Drew Adams <drew.adams@oracle.com> [2020-12-06 00:07]:
> > Chapter 12. Full Text Search
> > https://www.postgresql.org/docs/current/textsearch-intro.html*TEXTSEARCH-MATCHING
> 
> That's apparently what's often called full-text search,
> and which is an indexed search.  The text is indexed
> ahead of time, and the index is used for search "lookup".

I am not using indexed method, just searching on the fly.

Relevance search could be simpler in Emacs just for strings.

This is example of an SQL query that gives results on the fly without
previous index and it searches only within hyperlink names and tags,
it is easy to add the body or text to it. It does not change visible
speed.

(format "SELECT DISTINCT hlinks_id, hlinks_name, hlinktypes_name,
actionstatuses_name FROM hlinks, hlinktypes, actionstatuses WHERE
(actionstatuses_id = hlinks_actionstatuses AND hlinks_hlinktypes =
hlinktypes_id) AND to_tsquery(%s) @@ to_tsvector(hlinks_name || ' ' ||
hlinks_tags) %s" query parent)

> > What is good is that database PostgreSQL offers built-in relevance
> > searches..  In the manual there is little I can find related to
> > "relevance".
> 
> Which manual?

Emacs manual. I have been expecting something similar in
completing-read or some other functions.

> > If somebody knows if there is some "relevance" search in Emacs built-in
> > packages let me know, otherwise I will let database do the job.
> 
> "Relevance" can mean anything.  Think of how much can go
> into, say, a google search: "relevance" there can include
> intimate detail about you as a person, your likes, etc.

What I mean is that words are closer to each other, for example that
term:

google intimate person

find your above quoted paragraph.

> Yes, some Emacs 3rd-party libraries do provide "scoring"
> of some kinds of searches.  For example, for certain kinds
> of fuzzy matching a score can indicate how "closely" a
> given candidate is matched by your search pattern.

Fuzzy matching could be good. Is there in Emacs similar? Not that I am
looking for outside libraries.




^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: Relevance search in Emacs
  2020-12-05 21:26   ` Jean Louis
@ 2020-12-05 21:43     ` Drew Adams
  0 siblings, 0 replies; 6+ messages in thread
From: Drew Adams @ 2020-12-05 21:43 UTC (permalink / raw)
  To: Jean Louis; +Cc: Help GNU Emacs

> > https://www.postgresql.org/docs/current/textsearch-intro.html*TEXTSEARCH-MATCHING
> >
> > That's apparently what's often called full-text search,
> > and which is an indexed search.  The text is indexed
> > ahead of time, and the index is used for search "lookup".
> 
> I am not using indexed method, just searching on the fly.

I see.  I figured it was full-text search because PostGres is
a database.

> Relevance search could be simpler in Emacs just for strings.

It can be anything you want it to be.

> > "Relevance" can mean anything.  Think of how much can go
> > into, say, a google search: "relevance" there can include
> > intimate detail about you as a person, your likes, etc.
> 
> What I mean is that words are closer to each other, for example
> that term: google intimate person
> find your above quoted paragraph.

IOW, nearness measures.  That's typically used with indexed
text.  No, AFAIK, vanilla Emacs has no such thing.  And it
doesn't have any relevance sorting, except possibly for
recency of use.

> > Yes, some Emacs 3rd-party libraries do provide "scoring"
> > of some kinds of searches.  For example, for certain kinds
> > of fuzzy matching a score can indicate how "closely" a
> > given candidate is matched by your search pattern.
> 
> Fuzzy matching could be good. Is there in Emacs similar? Not that I am
> looking for outside libraries.

Not in vanilla Emacs.  Well, I guess maybe they've recently
added some pseudo-fuzzy matching as a completion style.
But you can easily add your own as a completion style, for
any Emacs version.

3rd-party libraries have fuzzy matching.

Isearch+ gives you the ability to use nearness matching,
using dynamic filtering:

https://www.emacswiki.org/emacs/DynamicIsearchFiltering

From that page:

  Search for something that is near something else – within
  a given number of characters, words, lists, or sentences
  (you can add to this list of distance units, using option
  ‘isearchp-movement-unit-alist’). You specify the nearness.
  You can also constrain the nearby pattern to be only before
  or only after the search hit.

  Search for stuff in the union of given contexts. Example:
  search for text that is near ‘cat’ or near ‘dog’.

  Search for stuff outside contexts: Use the complement of
  any set of contexts as the search space. Example: search
  for text that is not near ‘cat’ and not near ‘dog’.

You can do anything you want, from just vanilla Emacs, as you
know.  You can also look to the code or design of 3rd-party
features for help or inspiration.  Free software means you
have the source.  You can, but you need not, reinvent your
own wheels.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Relevance search in Emacs
  2020-12-05 18:18 Relevance search in Emacs Jean Louis
  2020-12-05 21:06 ` Drew Adams
@ 2020-12-05 22:22 ` TRS-80
  2020-12-06  4:59   ` Jean Louis
  1 sibling, 1 reply; 6+ messages in thread
From: TRS-80 @ 2020-12-05 22:22 UTC (permalink / raw)
  To: help-gnu-emacs

> On 2020-12-05 13:18, Jean Louis wrote:
> Before weeks I was discussing and trying to find something that could
> replace the `helm' in Emacs, so that I spare using external
> libraries. Then discussion with Drew clarified that what I am looking
> is rather type of a filter. But I would like to filter by
> relevance. Some packages like `ivy' and `helm' do offer relevance
> searches. Yet I wish to spare the basic package from using external
> functions. This way me or other users can use any completion or Emacs
> built-in completion function which is generally more user friendly in
> my opinion.

In fairness I never actually used Helm, because in my initial research
it looked to me to be much more obtrusuive and less in line with
established Emacs conventions.  I chose to go with Ivy at that time and
never looked back.  Apologies to anyone who prefer Helm, I am not trying
to start some flame war.  :)

Strictly speaking, you are correct, as under the hood my understanding
is that Ivy and Helm both implement a lot of their own things "on top
of" or "in place of" the "built-in" options.  However this is not
something I have ever really noticed in terms of being any sort of
"real" problem for me in the several years I have now been using Ivy.
But rather something I only even became aware of more recently as a
theoretical / structural criticism of Ivy/Helm coming from certain
circles[0] who instead seem to prefer to implement something... I dunno,
more "minimal" or...?

If I'm being honest those criticisms struck me as a bit self-serving,
especially coming from such a relative newcomer to the field.

Also, I seem to recall hearing that there was some discussion about
moving some part (or all?) of Ivy directly into Emacs itself?  I do know
that Ivy for a long time now have been assigning their copyrights to
GNU, they are very upfront about this to contributors at their GitHub in
fact.

Even those who would criticise Ivy/Helm[0] admit that there is a lot
more functionality that they offer than the "built-in" solutions.  I
realized this in developing some of my own (as yet unreleased) packages
where I depend on some of that functionality, and thus, in fact require
Ivy as a dependency.

If this was more about search itself than choice of completion
framework, I guess I totally missed the point, or maybe that's another
discussion to have.

Anyway, maybe give Ivy a try instead of Helm.  Or if you are swayed by
arguments at my footnote link, one of those other "minimal" completion
frameworks.

Cheers,
TRS-80

[0] https://github.com/raxod502/selectrum#why-use-selectrum



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Relevance search in Emacs
  2020-12-05 22:22 ` TRS-80
@ 2020-12-06  4:59   ` Jean Louis
  0 siblings, 0 replies; 6+ messages in thread
From: Jean Louis @ 2020-12-06  4:59 UTC (permalink / raw)
  To: TRS-80; +Cc: help-gnu-emacs

* TRS-80 <lists.trs-80@isnotmyreal.name> [2020-12-06 01:24]:
> Also, I seem to recall hearing that there was some discussion about
> moving some part (or all?) of Ivy directly into Emacs itself?  I do know
> that Ivy for a long time now have been assigning their copyrights to
> GNU, they are very upfront about this to contributors at their GitHub in
> fact.

As ivy is in GNU ELPA those issues are already solved. It is up to
author to polish the package if necessary to include it. But is not
necessary as it is already in GNU ELPA and new packages can request it
and it will be easier installed than from repositories not being
straight in GNU Emacs.

> Even those who would criticise Ivy/Helm[0] admit that there is a lot
> more functionality that they offer than the "built-in" solutions.

What Emacs needs is dynamic menu that user can filter quickly and work
on it, it would be similar to dmenu X program but one can only choose
one item there, or fzf console program which is more similar to what I
mean. Helm and ivy and others try to be that. But we do not have very
nice menu system in Emacs. And I do not refer to menu bar on top as
such is limited, then not dynamic.

Helm in full screen is pretty much what I think but again it limits
itself to execution of it.

Image list of items such as products. One need maybe to mark such and
move from one category to other. Job is tedious by doing it with
helm. List of people to which one need to send email by selecting them
by hand. Helm offers C-SPC to select each item and then run TAB
actions to do something with them. But programming with helm is
wasting time pretty much.

Doing it with tabulated-list-mode is so much easier:

- filter items (provided function exist for this interface)
- mark items (those are ID numbers)
- do something with items

For now I am transitioning from helm to tabulated-list-mode as for its
simplicity and interface that remains on screen, it is does not
disappear like completion interfaces (helm, ivy).

It just lacks dynamic filtering.

> realized this in developing some of my own (as yet unreleased) packages
> where I depend on some of that functionality, and thus, in fact require
> Ivy as a dependency.

First I have started going helm dependency direction as that was first
that I have discovered, then I have tried to make it that users can
decide on completion. This is best approach and also does not bind
myself to specific completion. Run it with built-in completion or turn
any other completion package.

It is best to have packages liberated from specific completion
packages such as ivy, helm, etc.

For me ivy does well with relevance search for few words apart from
each other may be used to locate the item. But it is still
"completion", it does not allow me actually work on the filtered set
of items. It wants me to complete. I think helm too. 

> If this was more about search itself than choice of completion
> framework, I guess I totally missed the point, or maybe that's another
> discussion to have.
> 
> Anyway, maybe give Ivy a try instead of Helm.  Or if you are swayed by
> arguments at my footnote link, one of those other "minimal" completion
> frameworks.

I am testing them all. Selectrum is just core stuff, it is not
integrated well for end users and it is completion, not dynamic filter
after filter. I hope you get what I mean.




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-12-06  4:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-12-05 18:18 Relevance search in Emacs Jean Louis
2020-12-05 21:06 ` Drew Adams
2020-12-05 21:26   ` Jean Louis
2020-12-05 21:43     ` Drew Adams
2020-12-05 22:22 ` TRS-80
2020-12-06  4:59   ` Jean Louis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).