Skip to content

Instantly share code, notes, and snippets.

@greggdonovan
Last active December 9, 2025 01:55
Show Gist options
  • Select an option

  • Save greggdonovan/bac438dff47bdd2b085c9ab12decee20 to your computer and use it in GitHub Desktop.

Select an option

Save greggdonovan/bac438dff47bdd2b085c9ab12decee20 to your computer and use it in GitHub Desktop.
<component id="com.yahoo.language.lucene.LuceneLinguistics" bundle="listings-search">
<config name="com.yahoo.language.lucene.lucene-analysis">
<configDir>analysis-config</configDir>
<analysis>
<item key="en">
<tokenizer>
<name>whitespace</name>
</tokenizer>
<tokenFilters>
<item>
<name>asciiFolding</name>
</item>
<item>
<name>synonymGraph</name>
<conf>
<item key="synonyms">synonyms.txt</item>
<item key="ignoreCase">true</item>
<item key="expand">true</item>
</conf>
</item>
<item>
<name>stop</name>
<conf>
<item key="words">stopwords.txt</item>
<item key="ignoreCase">true</item>
</conf>
</item>
<item>
<name>wordDelimiterGraph</name>
<conf>
<item key="generateNumberParts">1</item>
<item key="generateNumberParts">1</item>
<item key="catenateWords">1</item>
<item key="catenateNumbers">1</item>
<item key="catenateAll">1</item>
<item key="splitOnCaseChange">0</item>
<item key="splitOnNumerics">1</item>
<item key="stemEnglishPossessive">1</item>
<item key="preserveOriginal">1</item>
<item key="protected">wordDelimiterGraphFilterFactoryProtected.txt</item>
</conf>
</item>
<item>
<name>lowercase</name>
</item>
<item>
<name>lstem</name>
</item>
<item>
<name>removeDuplicates</name>
</item>
<item>
<name>synonymGraph</name>
<conf>
<item key="synonyms">british_synonyms.txt</item>
<item key="ignoreCase">true</item>
<item key="expand">true</item>
</conf>
</item>
<item>
<name>flattenGraph</name>
</item>
</tokenFilters>
</item>
</analysis>
</config>
</component>
public static void addLexicalMatchQuery(
String query, Query vespaQuery, ListingSearchOptions options, int size, int offset) {
...
vespaQuery
.getModel()
.setDefaultIndex(ListingSchema.FieldSets.Default(options.getTaxonomyHash()));
var queryType =
new QueryType(
Query.Type.LINGUISTICS,
QueryType.Composite.and,
QueryType.Tokenization.linguistics,
QueryType.Syntax.none);
vespaQuery.getModel().setType(queryType);
vespaQuery.getModel().setLanguage(Language.ENGLISH);
vespaQuery.getModel().setQueryString(query);
var rankProfile = Optional.ofNullable(options.getVespaRankProfile()).orElse("default");
vespaQuery.getRanking().setProfile(rankProfile);
Item filterItem = filters.genFilters(vespaQuery, filter, options, exclusionaryFacetFilter);
Matching.addLexicalMatchQuery(query, vespaQuery, options, size, offset);
vespaQuery.getModel().getQueryTree().and(filterItem);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment