There are a lot of posts out there saying that this is caused by a space in the name of the column. I'm sure that is one issue, but their is a deeper one than this. If you are like me and you want to tag lots of content in your site using various tools or your own, most of them do not know that they need to update the hidden note field to have a specific value too.
If you create a TaxonomyField and then set its value:
-1#TermName|TermGuid
This will add the value to the local HiddenTaxonomyList properly and you will get resolution when you look at the value in the editing of the item, but you missed a step! Simply doing the first step will only set the value to "|TermGuid" for the note field. SP Search wants to look up the default value via the TermName, not the Guid. Major fail if you ask me (it should be able to do both).
You must also set the hidden note field (its name will be "FieldName_0") to a value:
TermName|TermGuid
After doing this, FASTSharepoint will index your column and you are off an running with awesome term searching in your search center!
Some example code in PowerShell:
function CreateField($list, $name, $fieldname)
{
#setup the MMS
$site = get-spsite $global:site
$session = get-sptaxonomysession -site $site
$termstore = $session.termstores["Managed Metadata Service"]
$termGroup = $termstore.groups["GroupName"]
$termSet = $termGroup.TermSets[$name]
$field = $list.Fields.CreateNewField("TaxonomyFieldType",$fieldname);
$field.sspid = $termstore.id
$field.termsetid = $termSet.id
$list.fields.add($field)
$list.update()
}
function UpdateMMSNote($item, $name)
{
$text = $item[$name].Label + "|" + $item[$name].TermGuid
$name = $name + "_0"
$item[$name] = $text
}
function SetField($item, $termsetname, $fieldname, $value)
{
#setup the MMS
$site = get-spsite $global:site
$session = get-sptaxonomysession -site $site
$termstore = $session.termstores["Managed Metadata Service"]
$termGroup = $termstore.groups["GroupName"]
$termSet = $termGroup.TermSets[$termsetname]
$term = $termset.terms[$value];
$item[$fieldname] = "-1;#" + $term.labels[0].value + "|" + $term.id
$item.update()
}
CreateField $list "Technology" "Technology"
SetField $item "Technology" "Technology" "SharePoint"
UpdateMMSNote $item "Technology"
Enjoy!
Chris