【问题标题】:search user query pre-processing to search in specific field in solr搜索用户查询预处理以在 solr 中的特定字段中搜索
【发布时间】:2016-01-29 04:18:22
【问题描述】:

我是 solr 和 django 的新手,我正在努力在派对大厅场地搜索网站上进行搜索,尽管我没有在网站部分工作,只是为了搜索而使用 solr 我已经在 solr 中索引了派对大厅场地信息,如下所示字段

<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" required="true" />
<field name="slug" type="text_general" indexed="true" stored="true" required="true" />
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="location" type="text_general" indexed="true" stored="true"/>
<field name="city" type="text_general" indexed="true" stored="true"/>
<field name="area" type="text_general" indexed="true" stored="true"/>
<field name="featured" type="boolean" indexed="true" stored="true" />
<field name="facilities" type="text_general" indexed="true" stored="true" multiValued="true" />
<field name="type_of_venue" type="text_general" indexed="true" stored="true" multiValued="true" />...

还有许多其他字段仅用于在结果页面上显示数据,但只有这些字段用于查询数据

在我的网站上,我有一个搜索栏,用户可以在其中输入任何搜索词,然后我根据标题、描述、位置、设施进行搜索

现在我对如何分解用户输入的搜索词以识别在哪个字段中找到它进行了足够的阅读,以便我可以使用不同的模板视图来显示找到的匹配项,但找不到任何可行的技术用 solr。

请任何人都可以建议我任何预搜索文本处理技术,以便更简单地生成查询以在 solr 中搜索

提前致谢

【问题讨论】:

    标签: django search solr lucene search-engine


    【解决方案1】:

    如果您仔细索引您的数据(阅读示例),有一种简单(但不是最好的!)方法可以做到这一点。

    让我们说这是你的派对大厅文件

    1) party hall - "abc party hall", location - "san jose"
    2) party hall - "xyz party hall", location - "san francisco"
    3) party hall - "pqr party hall", location - "paris"
    4) party hall - "best party hall", location - "san jose"
    

    假设您的用户在搜索栏中输入“圣何塞最佳派对大厅”,理想情况下您应该返回 #4、1,对吗?

    您当然可以预处理您的查询(复杂的 NLP),以提取潜在的位置数据以用于查询中的位置字段。

    暂时让我们在这里采取蛮力方法,让我们使用布尔查询并按原样搜索所有重要字段的完整查询

    party_hall: "best party hall in san jose" AND location: "best party hall in san jose"
    

    如果您已正确索引您的数据(如上面的示例文档中所示),您将获得预期的最佳结果。

    party hall 查询将没有“san jose”,因此它会考虑带有“best party hall”的文档,同样位置字段将过滤带有“san jose”的文档,因此从技术上讲,您应该获得最佳匹配的文档 #4,1。您可以使用“OR”而不是“AND”,但您将获得更多匹配的文档(但排名排序仍然准确且符合预期)

    在您的用例中尝试一下,看看是否有帮助!

    p.s - 如果您使用任何基于标记器的分析器,例如 StandardAnalyzer,这将起作用(不适用于 KeywordAnalyzer)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2011-12-26
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      相关资源
      最近更新 更多