如何让建议组件在 SolrNet 中工作?

2023-11-25

我已经配置了 solrconfig.xml 和 schema.xml 来查询建议。

我可以从网址中获取建议

http://localhost:8080/solr/collection1/suggest?q=ha&wt=xml

我的 SolrConfig.xml 看起来像

目前,我的 solr 查询看起来像

<fields>
    <!-- declare fields of entity class -->
    <!-- type will specify the table name -->
    <field name="type" type="string" indexed="true" stored="true"  />

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="name" type="text_general" indexed="true" stored="true" omitNorms="true"/>

    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
    <field name="_version_" type="long" indexed="true" stored="true"/>

    <!-- unique field -->
    <field name="uid" type="uuid" indexed="true" stored="true" />

  </fields>

  <uniqueKey>uid</uniqueKey>

  <copyField source="name" dest="text"/>

  <types>
    <fieldType name="uuid" class="solr.UUIDField" indexed="true" />
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>

    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
    .....
    </types>

我的 schema.xml 看起来像这样

<searchComponent name="suggest" class="solr.SpellCheckComponent">
    <!-- a spellchecker built from a field of the main index -->
    <lst name="spellchecker">
      <str name="name">suggest</str>
      <str name="field">name</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
      <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
      <str name="buildOnCommit">true</str>          
      <str name="distanceMeasure">internal</str>
      <float name="accuracy">0.5</float>
      <int name="maxEdits">2</int>
      int name="minPrefix">1</int>
      <int name="maxInspections">5</int>
      <int name="minQueryLength">4</int>
      <float name="maxQueryFrequency">0.01</float>
       <float name="thresholdTokenFrequency">.01</float>      
    </lst>

    <!-- a spellchecker that can break or combine words.  See "/spell" handler below for usage -->
    <lst name="spellchecker">
      <str name="name">wordbreak</str>
      <str name="classname">solr.WordBreakSolrSpellChecker</str>
      <str name="field">name</str>
      <str name="combineWords">true</str>
      <str name="breakWords">true</str>
      <int name="maxChanges">10</int>
    </lst>
</searchComponent>

<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
    <lst name="defaults">
      <str name="df">text</str>
      <!-- Solr will use suggestions from both the 'default' spellchecker
           and from the 'wordbreak' spellchecker and combine them.
           collations (re-written queries) can include a combination of
           corrections from both spellcheckers -->
      <str name="spellcheck">true</str>
      <str name="spellcheck.dictionary">suggest</str>
      <!--<str name="spellcheck.dictionary">wordbreak</str>-->
      <str name="spellcheck">on</str>
      <str name="spellcheck.extendedResults">true</str>       
      <str name="spellcheck.count">10</str>
      <str name="spellcheck.alternativeTermCount">5</str>
      <str name="spellcheck.maxResultsForSuggest">5</str>       
      <str name="spellcheck.collate">true</str>
      <str name="spellcheck.collateExtendedResults">true</str>  
      <str name="spellcheck.maxCollationTries">10</str>
      <str name="spellcheck.maxCollations">5</str>         
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>

我调用 SolrNet API 的代码如下所示

new SolrBaseRepository.Instance<T>().Start();
        var solr = ServiceLocator.Current.GetInstance<ISolrOperations<T>>();
        var options = new QueryOptions
        {
            FilterQueries = new ISolrQuery[] { new SolrQueryByField("type", type) }
        };
        var results = solr.Query(keyword, options);
        return results;

但是,我没有得到任何数据。 结果计数为零。结果中的拼写检查也为零​​。

我也没有在结果中看到建议列表。

enter image description here

请帮忙


我有完全相同的要求,但找不到任何方法来轻松处理建议者SolrNet 的结果。不幸的是,SolrNet 似乎是围绕默认构建的/select请求处理程序,目前不支持任何其他处理程序,包括/suggest对于对象类型映射(T)。它期望所有映射都与索引的 Solr 文档结果一起发生,而不是与建议器结果一起发生。

Hence, @Paige Cook 的回答不适合我。T具有映射的类型与建议者结果响应不兼容。来自初始化请求的所有标准管道代码(Startup.Init<T>()) 到查询 (ISolrQueryResults<T> results = solr.Query())需要映射的 Solr 文档类型,而不是建议者提供的简单字符串数组。

因此,(类似于@dfay)我发出一个 Web 请求并从 XML Web 响应中解析出建议的结果。这SolrConnection类用于此目的:

string searchTerm = "ha";
string solrUrl = "http://localhost:8080/solr/collection1";
string relativeUrl = "/suggest";
var parameters = new Dictionary<string, string>
                {
                    {"q", searchTerm},
                    {"wt", "xml"},
                };

var solrConnection = new SolrConnection(solrUrl);
string response = solrConnection.Get(relativeUrl, parameters);
// then use your favorite XML parser to extract 
// suggestions from the reponse string

或者,请求可以使用以下命令返回 JSON 响应,而不是 XMLwt=json范围:

var parameters = new Dictionary<string, string>
                {
                    {"q", searchTerm},
                    {"wt", "json"}, // change this!
                };
// then use your favorite JSON parser
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让建议组件在 SolrNet 中工作? 的相关文章

随机推荐

  • numpy.sum 可能比 Python for 循环慢

    当对特定轴上的数组求和时 专用数组方法array sum ax 实际上可能比 for 循环慢 v np random rand 3 1e4 timeit v sum 0 vectorized method 1000 loops best o
  • 如何在 Web API 请求中的 FromBody ViewModel 中使用带有 EnumMember 属性的枚举?

    我正在尝试在 ASP NET Core Web API 项目中实现 HttpPost 方法 FromBody 查看模型和枚举 过去 将视图模型与 FromBody 属性效果很好 在我的特定场景中 我想提供一个 JSON 端点 在其中将给定值
  • 如何在 Laravel 中流式传输视频

    我正在尝试流式传输刀片文件中的视频 通常视频正在加载 但我无法来回播放 这是我关注的链接 https codesamplez com programming php html5 video streaming tutorial 我已经在我的
  • 当类型已知时,是否有任何技术原因在 C# 中使用或不使用 var?

    我读到的 C 代码似乎越来越多地使用var类型标识符 foreach var itemChange in ItemChanges 代替明确地说明类型 foreach ItemChange itemChange in ItemChanges
  • 如何从.cer和.key获取.pfx文件?

    在此提问之前 我已经搜索了很多关于我的问题 而且问题仍然存在 以下是我已经阅读过的帖子参考 如何从证书和私钥创建 pfx 文件 将 CERT PEM 证书转换为 PFX 证书 如何从 key和 crt文件获取 pem文件 如何从 cer 文
  • 划分类:jenks 与 kmeans

    我想将一个向量 长度约为 10 5 分为五个类 具有功能classIntervals从包装中classInt我想用style jenks 自然中断 但即使对于只有 500 的小得多的向量 这也会花费大量时间 style kmeans 几乎立
  • 使用 DataContext 从 LINQ 查询填充 DataTable 的最快方法

    我正在尝试运行 linq 查询 但我需要结果作为数据表 因为我使用它来将来自不同查询的记录存储在同一视图状态对象中 下面的 2 个版本可以编译 但返回一个空集 确切的错误是 值不能为空 参数名称 来源 是的 我已经检查过有数据 MyData
  • 当前分支没有跟踪信息

    我使用 github 的时间相对较短 并且一直使用客户端来执行提交和拉取 我昨天决定从 git bash 尝试一下 并成功创建了一个新的存储库并提交了文件 今天我从另一台计算机对存储库进行了更改 我已经提交了更改 现在我回到家并执行了git
  • React:读取history.push中作为参数传递的数据

    我是新来反应的 我正在尝试发送一些数据作为参数history push 基本上 我在单击按钮时调用一个方法 并在该方法内调用一个 api 如果我得到成功响应 我会重定向到其他页面 并且我还需要传递一些数据 下面是我的代码 class Log
  • 在 ElasticBeanstalk 上运行 Grunt

    我有一个节点应用程序 需要 grunt 进行 构建 然后应用程序才能成功执行 运行源代码的连接 缩小 加速等 我已经在具有 SSH 访问权限的 EC2 实例上运行了它 因为我可以通过 SSH 进入目录并在部署过程中运行 Grunt 然而 为
  • 为什么“gem”和“bundle”不使用相同的 libxml2?

    我似乎陷入了沮丧的递归循环中 我正在尝试 捆绑安装 一个项目 但结果是 An error occurred while installing nokogiri 1 6 6 2 and Bundler cannot continue Make
  • 如何防止两个CUDA程序互相干扰

    我注意到 如果两个用户尝试同时运行 CUDA 程序 它往往会锁定卡或驱动程序 或两者 我们需要重置卡或重新启动机器以恢复正常行为 有没有办法锁定 GPU 以便其他程序在运行时无法干扰它 Edit 操作系统是在服务器上运行的 Ubuntu 1
  • 在Java中,字符串是字符数组吗?

    我想知道 如果String是一个集合 我已经阅读了周围的内容 但仍然很困惑 字符串是不可变的表示字符序列的对象 CharSequence是 String 实现的接口之一 与字符数组和字符集合的主要区别 字符串无法修改 不可能 忽略反射 添加
  • 从两个日期之间的日期范围中选择数据

    我有一张名为Product Sales它保存这样的数据 Product ID Sold by Qty From date To date 3 12 7 2013 01 05 2013 01 07 6 22 14 2013 01 06 201
  • 如何在 React 中使用 RXJS fromEvent?

    我试图在反应中记录按钮上的点击事件 const InputBox gt const clicky fromEvent document getElementById clickMe click subscribe clickety gt c
  • 如何创建数组的随机排列?

    我已经用 C 编写了这个函数 我希望它创建一个随机排列或从 1 到 n 的数字列表 我很难让它没有重复的数字 因此 如果您有 n 4 我希望它返回一个包含 1 4 的随机数组 每个数组仅一次 例如 1 3 4 2 int random in
  • 如何使用 powershell 为 Windows 10 通用应用程序创建桌面快捷方式?

    我有一个创建的 UWP 应用程序 想要使用 powershell 在桌面上创建快捷方式 创建快捷方式对于 exe 来说很容易 TargetFile Path To MyProgram exe ShortcutFile env USERPRO
  • 访问相关对象键而不在App Engine中获取对象

    一般来说 对给定对象执行单个查询比执行多个查询更好 假设我有一堆 儿子 对象 每个对象都有一个 父亲 我得到了所有 儿子 对象 sons Son all 然后 我想找到那群儿子的所有父亲 我愿意 father keys for son in
  • 如何将GET参数传递给jsFiddle

    如何将GET参数传递给jsFiddle 我试过http jsfiddle net mKwcF id 123但我得到的只是http fiddle jshell net mKwcF show 我的示例 js 在上面给定的链接上很简单 alert
  • 如何让建议组件在 SolrNet 中工作?

    我已经配置了 solrconfig xml 和 schema xml 来查询建议 我可以从网址中获取建议 http localhost 8080 solr collection1 suggest q ha wt xml 我的 SolrCon