环境==>solr-solr-8.9.0,java版本“11.0.12”2021 07-20 LTS
以下.csv文件在solr中被索引
books_id,cat,name,price,inStock,author,series_t,sequence_i,genre_s
0553573403,book,Game Thrones Clash,7.99,true,George R.R. Martin,"A Song of Ice and Fire",1,fantasy
0553573404,book,Gam Thrones,7.99,true,George Martin,"A Song of Ice and Fire",1,fantasy
0553573405,book,Throne Game,7.99,true,George,"A Song of Ice and Fire",1,fantasy
0553573406,book,Game Thrones Swords,7.99,true,George,"A Song of Ice and Fire",1,fantasy
我想模糊搜索一本名字为“游戏宝座”的书。
字段类型:textgeneral是为多值为false的字段“name”配置的text_general正在使用solr。StandardTokenizerFactory作为“托管架构”中的标记器类。
输出应仅包含这些图书ID:
0553573404 : (name - Gam Thrones)
0553573405 : (name - Throne Game)
我希望以下图书ID不匹配:
0553573403 (name - Game Thrones Clash) ==> 'Clash' is extra tokens, so it should not come in output.
0553573406 (name - Game Thrones Swords) ==> 'Swords' is extra tokens, so they should not come in output.
只有输入查询中指定的标记是模糊匹配的。
我知道我可以在solr查询中使用运算符“AND”。我尝试使用一个模糊匹配(输入:“游戏宝座”)“游戏”和“宝座”的查询,但它给出了其他结果(“游戏宝塔冲突”(books_id:0553573403)和“游戏宝剑”(books_id:0053573406))。
为此,执行以下查询
curl -G http://localhost:8983/solr/testCore2/select --data-urlencode "q=(name:'Game~') AND (name:'Thrones~')"
但上面的查询给出了结果中的所有图书ID。(0553573403055357340405535734055357573406)
如何在solr查询中找到独立结果?
1条答案
按热度按时间dba5bblo1#
在我看来,它不会像你期望的那样工作。
您可以尝试使用两个单独的字段进行此操作。
第一个字段是非标记化字段,您可以使用string fieldtype或textfield类型与
KeywordTokenizerFactory
和e1d1e。第二个字段应该使用标记化的字段,这里您可以根据需要使用
StandardTokenizerFactory
或其他类似WhitespaceTokenizerFactory
的字段。当需要模糊搜索或精确匹配时,必须在非标记化字段上搜索。
您也可以尝试使用Proximity搜索。
Proximity Searches
:邻近搜索的语法是在搜索阶段的末尾附加波浪符号~和数值。它在特定距离(所需术语移动的数量)内匹配术语。例如: