【发布时间】:2015-08-19 06:52:27
【问题描述】:
谁能告诉我如何在 solr 中进行复杂的短语搜索,例如:如果用户输入“and MAC F1:65”,结果中应该有“and MAC F1:65”,这似乎如果我通过以下查询,则对以 F1:65 开头的 MAC 地址(MAC 地址为 F1:65:CA:F0:00:00 )工作正常。
display_string:"and MAC F1:65"
但是如果只想搜索MAC地址的一部分,假设我的查询是“and MAC 65:CA”,即使我转义了分号,上面的命令也不起作用,我也尝试过传递通配符,但是他们也不工作。
还有,这是什么意思:
"msg": "查询中没有指定字段名,也没有通过'df'参数指定默认值"
我是初学者,我花了两天时间试图解决这个问题,我需要一个插件来做到这一点吗?
编辑:如果我使用 dismax 插件将查询分解为 (+and +MAC +65\:CA),它会起作用,但是 Lucene 查询没有其他方法可以做到这一点吗?
这是核心的架构:
<schema name="autoSolrSchema" version="1.5">
<types>
<fieldType class="org.apache.solr.schema.TextField" name="TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType class="org.apache.solr.schema.TrieDateField" name="TrieDateField"/>
<fieldType class="org.apache.solr.schema.UUIDField" name="UUIDField"/>
<fieldType class="org.apache.solr.schema.TrieIntField" name="TrieIntField"/>
<fieldType class="org.apache.solr.schema.StrField" name="StrField"/>
</types>
<fields>...
【问题讨论】:
-
能否提供用于索引和查询阶段的FieldType声明?
-
这里是
<field indexed="true" multiValued="false" name="display_string" stored="true" type="TextField"/>我不明白您所说的查询阶段是什么意思?我没有为查询阶段传递任何字段类型参数.. -
能否提供 display_string 的定义?
-
display_string 是文本类型的 cassandra 键空间中的一列...这是您想知道的吗?我正在 cassandra/dse 上使用 solr ..
-
没有。你的
schema.xml应该有一个 FieldType 标记声明,它定义了标记器和一组过滤器,以便在索引之前处理这个字段。例如: text_general 是使用StandardTokenizerFactory和一些StopwordFilter 的一种。 text_general