Cross field serch problem

I'm trying to implement search functionality in our project using Nest. I have following query:

	.Bool(must => must
			.Filter(m => m
				.MultiMatch(qs => qs
					.Fields(fields => fields
						.Field(item => item.Username)
						.Field(item => item.Name)
						.Field(item => item.Surname)
						.Field(item => item.FavColor)
						.Field(item => item.Description)
						.Field(item => item.ClientNumber)
						.Field(item => item.Code)
						.Field(item => item.Options)
						.Field(item => item.Equipment)
						.Field(item => item.Year)
						.Field(item => item.Status))
					.Query(filters?.SearchText ?? string.Empty)

Fields have diffrent analyzers:

  • Edge-Ngram
  • Ngram
  • Keyword

When I enter the search query, f.e. John Redling, I want get only the documents, that have all words from search phase, but each word can be found in separate fields, for example user with name John o Johnny(edge-ngram analyzer) and surname starting with Redling.
My problem is, that currently, having ngrams make this difficult. It the exmple above Redling produces ngrams: red, edl, dli, etc. I set MinimumShouldMatch to 100%, but still it can find red in color and ling in different field and it's 100%, but it's not document i'm looking for.
Is there a better way to implement it?

I ended up increasing maxgram value to 10, keeping mingram at 3. It doesn't sovlve the problem entirely, but probability of having false positive results is very low.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.