2014-10-29 89 views
0

我想迎合以下示例与Azure搜索。从给定的纬度/经度位置的距离Azure搜索 - OrderBy可过滤字段,然后通过距离

{ 
    "name": "mySchema", 
    "fields": [ 
    { 
     "name": "Id", 
     "type": "Edm.String", 
     "key": true, 
     "searchable": false, 
     "filterable": false, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": true, 
     "suggestions": false 
    }, 
    { 
     "name": "StateId", 
     "type": "Edm.Int32", 
     "key": false, 
     "searchable": false, 
     "filterable": true, 
     "sortable": false, 
     "facetable": false, 
     "retrievable": true, 
     "suggestions": false 
    }, 
    { 
     "name": "Location", 
     "type": "Edm.GeographyPoint", 
     "key": false, 
     "searchable": false, 
     "filterable": true, 
     "sortable": true, 
     "facetable": false, 
     "retrievable": true, 
     "suggestions": false 
    }, 
    ], 
} 

我希望能够首先下令对StateId场我的结果,并然后: 给出下面的索引架构。

我知道我能够在查询时通过使用$filter= StateId eq x组件来实现第一部分。但是,我确实希望仍然收到不在提供的StateId中但距离提供的位置有一定距离的结果(分数较低)。

我也认识到,这看起来应该能够通过自定义评分配置文件来实现。我会用进球档案想到,我能够回到这样的事情:

[ 
    { 
    "@search.score":100.0, 
    "Id":"111", 
    "StateId":"123", 
    "Location": {"type": "Point details...."}, 
    }, 
    { 
    "@search.score":100.0, 
    "Id":"222", 
    "StateId":"123", 
    "Location": {"type": "Point details...."}, 
    }, 
    { 
    "@search.score":50.0, 
    "Id":"333", 
    "StateId":"789", 
    "Location": {"type": "Point details...."}, 
    } 
] 

但是,我不能搜索的StateId领域,因为这是一个Edm.Int32价值,所以我做的不相信使用评分档案将是一个可行的解决方案。

任何人都会遇到类似的情况?

编辑:

试图进一步解释只是有点 - 如果我是伪SQL来解释这一点,这基本上是我试图处理

ORDER BY (CASE WHEN StateId = @StateId THEN 1 ELSE 0 END) DESC, Location 
+0

我想过的一个想法是添加一个名为“StateIdGuid”的额外可搜索字段,并使用评分配置文件来匹配此值。 – Nagoh 2014-10-29 05:10:16

+0

您的数据存储在哪里,您使用的是Azure表格存储? – Abhijeet 2014-10-29 06:39:55

+0

这是使用Azure搜索 - http://azure.microsoft.com/en-us/services/search/ – Nagoh 2014-10-29 09:49:27

回答

0

的情况下,我们目前不支持使用配置文件建模此场景。这已经出现了多次,所以这是我们想补充的。

与此同时,作为解决方法,您可以将StateId值添加到其中一个可搜索字段(例如,将其附加到文本末尾)。然后,在搜索过程中将状态ID作为搜索字符串的一部分,这应该会将结果歪曲为符合状态ID的文档(或者,如果没有它,这可能是很好的相关性,取决于具体情况)。

在显示期间,如果显示此文本字段,则必须从字符串末尾去除状态ID(或使用其他字段)。

+0

感谢您的回复。但这对我来说并不是一个真正有用的解决方法。我想我委托做2个查询。第一个得到'StateId eq 123'的地方,第二个'StateId ne 123 AND geo.distance(location,..., – Nagoh 2014-10-29 10:16:40